1

以下で解決しました。長いのでもっといいものが必要です。

//コード

class Program
{
    static void Main(string[] args)
    {
        Hashtable hsTbl = new Hashtable();

        hsTbl.Add(1, "Suhas");
        hsTbl.Add(2, "Madhuri");
        hsTbl.Add(3, "Om");
        List<object> keyList = new List<object>();
        List<object> ValList = new List<object>();

        Console.WriteLine("Key          Value");
        foreach (DictionaryEntry item in hsTbl)
        {
            Console.WriteLine(item.Key + "      " + item.Value);
            keyList.Add(item.Value);
            ValList.Add(item.Key);

        }
        hsTbl.Clear()

//Swapping          

        for (int i = 0; i < keyList.Count; i++)
        {
            hsTbl.Add(keyList[i], ValList[i]);
        }

//will display hashtable after swapping

        foreach (DictionaryEntry item in hsTbl)
        {
            Console.WriteLine(item.Key + "      " + item.Value);
        }
    }
}

他にもっと良い解決策はありますか?

4

2 に答える 2

1

次のように、追加のHashTableを作成せずに、2つのリストではなく、追加の配列とCopyToメソッドを使用して少し簡単に行うことができます。

//コード

using System;
using System.Collections;

class Program
{
  static void Main()
  {
      Hashtable hsTbl = new Hashtable();

      hsTbl.Add(1, "Suhas");
      hsTbl.Add(2, "Madhuri");
      hsTbl.Add(3, "Om"); 

      DictionaryEntry[] entries = new DictionaryEntry[hsTbl.Count];
      hsTbl.CopyTo(entries, 0);
      hsTbl.Clear();

      foreach(DictionaryEntry de in entries) hsTbl.Add(de.Value, de.Key);

      // check it worked

      foreach(DictionaryEntry de in hsTbl)
      {
         Console.WriteLine("{0} : {1}", de.Key, de.Value);
      }
  }
}

一般に、元のハッシュテーブルの値の一部が重複している可能性があり、したがってキーとして不適切である可能性があるため、メソッドが機能することが保証されていないことに注意してください。

于 2013-03-26T09:59:47.743 に答える
1

Dictionary<string,int>Linqで簡単に作成できるgenericを使用できます。

var dictionary = hsTbl.OfType<DictionaryEntry>()
                      .ToDictionary(e => (string)e.Value, e => (int)e.Key);

本当に必要な場合はHashtable、次のようにします。

Hashtable table = new Hashtable();
foreach (DictionaryEntry entry in hsTbl)
    table.Add(entry.Value, entry.Key);

ただし、値とキーを交換する場合は、すべての値が一意であることを確認してください。

于 2013-03-26T10:00:38.843 に答える