• 締切済み

C#のListの要素がHashtableの並べ替え

Listの要素がHashtableなのですが、Hashtableの特定のキーでListを並べ替える事ができるでしょうか? 例えば次の様な場合 int[] pid = new int[] { 2, 1, 3 }; string [] pname = new string[] { "田中", "鈴木", "本田" }; string[] pref = new string[] { "埼玉", "群馬", "千葉" }; int[] presult = new int[] { 65, 38, 52 }; List<object> usertList = new List<object>(); for (int i = 0; i <= 2; ++i) { Hashtable t_obj = new Hashtable(); t_obj["pid"] = pid[i]; t_obj["pname"] = name[i]; t_obj["pref"] = pref[i]; t_obj["presult"] = presult[i]; usertList.Add(t_obj); } usertListを pidに従って並べ替える presultに従って並べ替える presultとpidに従って並べ替える という事を行いたいのですが、どうすればよいか分かりません。 申し訳ありませんが、教えていただけないでしょうか?

noname#207939
noname#207939

みんなの回答

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

http://ameblo.jp/tasoh/entry-10635397793.html ここに書いてます。 こういう基本は本を読むか検索するかで処理してください。

関連するQ&A

  • List<T>のタイプを調べる方法は?

    C# を使用しています。 たとえば {  string str;  MessageBox.Show(obj.GetType().Name); } これだと[string]が表示されます。 次に {  List<int> ilist = new List<int>(); MessageBox.Show(obj.GetType().Name); } これだと[List`1]が表示されます。 これだけでもListってことだけはわかるのですが 最後に {  List<int> ilist = new List<int>();  List<string> slist = new List<string>();  MessageBox.Show(ilist.GetType().Name);  //→[int]  MessageBox.Show(slist.GetType().Name);  //→[string] } この場合に [string],[int]と表示させるにはどうすれば よいのでしょうか?

  • ListのItemListenerについて

    50音のリストから選択したタイトルの画像を表示するようなプログラムを作ろうと思っているのですが、ItemListenerの2種類以上の使い方?が分かりません。 左側のChoiceからListの内容は書き換えることが出来たのですが、真ん中のListから右のListを書き換え、更には右のListから下部へ画像を表示させたいのです。 この場合どのように記入すればいいのか教えてください。お願いします。 以下拙いですが自分の書いた部分です import java.applet.Applet; import java.awt.*; import java.awt.event.*; public class Test extends Applet implements ItemListener{ Panel p[]=new Panel[1]; Choice c1; String s[]={"あ","い","う","え","お","か","き","く","け","こ", "さ","し","す","せ","そ","た","ち","つ","て","と", "な","に","ぬ","ね","の","は","ひ","ふ","へ","ほ", "ま","み","む","め","も","や","ゆ","よ","","", "ら","り","る","れ","ろ","わ","","","","",}; List lst1,lst2; int i; public void init() { p[0]=new Panel(new GridLayout(1,3)); c1=(Choice)p[0].add(new Choice()); for (i=0;i<50;i=i+5) c1.add(s[i]+"行"); c1.addItemListener(this); lst1=(List)p[0].add(new List(5)); lst1.add(s[0]); lst1.add(s[1]); lst1.add(s[2]); lst1.add(s[3]); lst1.add(s[4]); lst1.addItemListener(this); lst2=(List)p[0].add(new List(5)); lst2.addItemListener(this); add(p[0]); } public void itemStateChanged(ItemEvent e){ Choice c1=(Choice)e.getSource(); String str=(String)c1.getSelectedItem(); if(str.equals("あ行")){ lst1.removeAll(); for(i=0;i<5;i++){ lst1.add(s[i]); } lst2.removeAll(); } else if(str.equals("か行")){ lst1.removeAll(); for(i=5;i<10;i++){ lst1.add(s[i]); } lst2.removeAll(); } 以下わ行まで書いてあります } public void destroy() { } }

    • ベストアンサー
    • Java
  • Listからのnull要素を削除方法は?

    次のリストに入っているnull要素を削除する方法をお教え下さい。  List<String> lst = new ArrayList<String>(); while (lst.remove(null)); や for (int i=0; i < lst.size();i++) {  if (lst.get(i) == null ) lst.remove(i); } ではException in thread "main" java.lang.UnsupportedOperationException が起こります。 2011 Nov. 27.

    • ベストアンサー
    • Java
  • この警告はどうすれば?

    以下のメソッドを含むプログラムをEclipseで作成している際に次のような警告が発生しました。 型の安全性:型Comparator の式は、未検査の型変換を使用してComparator<? super T>に準拠するようにする必要があります。 型の安全性:型 Arrays の総称メソッド sort(T[], Comparator<? super T>)の未検査の呼び出し sort(Object[],Comparator)がありました。 コンパイルして実行する分には、なんら問題ないのですが、この警告の意味と解決策が分からないままにしておくのは気持ち悪いので、分かる方がいらしたら教えてください。 static void sortName(){  String array[] = new String[4];  array[0] = "abba";  array[1] = "abab";  array[2] = "aaaa";  array[3] = "aabb";  Comparator asc = new Comparator() {   public int compare(Object obj0, Object obj1) {    String nameKana0 = (String)obj0;    String nameKana1 = (String)obj1;    int ret = 0;    ret = nameKana0.compareTo(nameKana1);    return ret;  }  };  Comparator comparator = asc;  Arrays.sort(array, comparator); // 配列をソート  for (int i = 0; i < array.length; i++)   System.out.println(array[i]); }

    • ベストアンサー
    • Java
  • Listインターフェースの使用法

    Listインターフェースの使い方ですが、 List list; String a = new String("AAA"); String b = new String("BBB"); list.add(a); list.add(b); というふうにするとlistは初期化されていませんとエラーになります。 また、Listに格納したオブジェクトの取り出し方も教えてください。

  • C# override

    某C#の入門書のサンプルですが、overrideがよくわかりません。 using System; using System.Collections.Generic; using System.Text; namespace PersonList {   class Person   {     public string name;     public int age;     public Person(string nam, int ag)     {       name = nam;       age = ag;     }     public override string ToString()     {       return String.Format("{0}({1})", name, age);     }   }   class Program   {     static void Main(string[] args)     {       List<Person> p = new List<Person>();       p.Add(new Person("Pochi", 3));       p.Add(new Person("Kenta", 5));       p.Add(new Person("Mari", 4));       p.Add(new Person("Wanko", 1));       p.Add(new Person("Doggy", 4));       p.ForEach(Console.WriteLine);     }   } } 1.overrideをしないと 「PersonList.Person」が出力されてしまうのですが  なぜToString()をoverrideするのかがわかりません。 2.override しないですべての内容を出力するためにはどうしたら  いいのでしょうか?

  • C# List<>が表示されない

    C# List<>が表示されない Visual Studio にて作成 lblCalendar = new List<Label>(); for (int iAllCount = 0; iAllCount < 42; iAllCount++) { lblCalendar.Add(new Label()); } // ptbCalendar = new List<PictureBox>(); for (int iAllCount = 0; iAllCount < 42; iAllCount++) { ptbCalendar.Add(new PictureBox()); } // ptbCalendar[ptCalendar].BackColor = Color.FromArgb(100, 255, 255, 255); それぞれ42個生成しました。 それをカレンダーメソッドを作って画面に表示させました。 ピクチャーはColor.FromArgb(100, 255, 255, 255)で透過させました。 最初の画面(現在だと2月の画面が最初)は正常にカレンダーが表示されピクチャーは隠れています。 ですが private void button1_Click(object sender, EventArgs e) { month--; if (month == 0) { year = year - 1 month = 12; } CaledarControl(year, month);//カレンダー用のメソッド ptbControl(); //ピクチャー用のメソッド this.Refresh(); } これで次の月のページに飛ぶとカレンダーが全部消えてしまい、隠れていたピクチャーがすべてでてしまいます。 どうすればこのバグがなくなりますか?

  • Listの<Label>と<PictureBox>

    C# リスト型作成 List<Label> labelset; リストの中に10個のLabelを作る for(int lblcount=0 ; lblcount<10; lblcount++) { labelset.Add(new Label()); } ここからが質問です。 for (int i =0; i<labelset.Length;i++) コレだとエラーがでてしまいます。 0からlabelsetの終わりまでするにはどうすればいいですか? *for (int i =0; i<10;i++) これはしたくないです;;

  • ソートについて

    以下のプログラムを実行すると整数のソート結果が "1","12","3"となってしまいます。 整数と文字列を分離させてそれぞれソートさせたいのですが 方法がわかりません。 import java.util.*; import java.io.*; class StrArray{ ArrayList list = new ArrayList(); //最下行に要素を追加 public void add(String data){ list.add(data); } //全ての要素を配列で所得 public String[] getAll(){ String[] all = new String[list.size()]; for(int i=0; i<list.size(); i++){ all[i] = super.get(i); } return all; } public static final int ASC_SORT = 0; public void sort(int mode){ ArrayList al = this.qsort(mode, list); al = list; } //クイックソート public ArrayList qsort(int mode, ArrayList data){ ArrayList result = new ArrayList(); if(data.size()<1){ return new ArrayList(); } String middle = (String)data.get(data.size()/2); ArrayList left = new ArrayList(); ArrayList right = new ArrayList(); for(int i=0; i<data.size(); i++){ if(i != data.size()/2){ if(mode == 0){ if(((String)data.get(i)).compareTo(middle)<=0){ left.add(data.get(i)); } else{ right.add(data.get(i)); } result.addAll(qsort(0, left)); result.add(middle); result.addAll(qsort(0, right)); return result; } return result; } } } } class Sample{ public static void main(String args[]){ StrArray alist = new StrArray(); alist.add("bbb"); alist.add("aaa"); alist.add("ddd"); alist.add("ccc"); alist.add("3"); alist.add("1"); alist.add("12"); alist.sort(0); String[] info = alist.getAll(); for(int i = 0; i < info.length; i++){ System.out.println(info[i]); } } }

  • [C#]Arraylistに追加した構造体の内容の変更

    struct Hoge {     public string name;     public string address; } ArrayList list = new ArrayList(); Hoge test = new Hoge(); test.name = "あいうえお"; test.address = "123"; list.Add(test); test.name = "かきくけこ"; test.address = "456"; list.Add(test); //ここから //list[0].name = "さしすせそ"; のように追加するコードを書きたいです //ここに for (int i = 0; i < List.Count; i++) {     MessageBox.Show((Hoge)List[i]).name.ToString()); } これで、 list[0]のnameには"あいうえお" list[1]のnameには"かきくけこ" が、代入されていますが list[0]のnameをArrayListに追加したあとに変更したいのです。 このままだと、「あいうえお」「かきくけこ」と表示されますが、 「さしすせそ」を途中でlist[0]の代入して、 「さしすせそ」「かきくけこ」と表示したいのです。

専門家に質問してみよう