Javaの世界からC#に移行するとHashMapに相当するのでしょうか?もしあなたが何をお勧めしますか?C#Java HashMap相当の
答えて
Dictionary
がおそらく最も近いでしょう。 System.Collections.Generic.Dictionary
はSystem.Collections.Generic.IDictionary
インターフェイス(JavaのMap
インターフェイスに似ています)を実装しています。
あなたが知っておくべきいくつかの顕著な違い:
- が
- JavaのHashMapのが/取得アイテム
myMap.put(key, value)
を設定するための
MyObject value = myMap.get(key)
put
とget
メソッドを持っている/追加取得アイテム - C#の辞書取得/設定項目のため
[]
インデックスを使用していますmyDictionary[key] = value
MyObject value = myDictionary[key]
- JavaのHashMapのが/取得アイテム
null
キー- Javaの
HashMap
がnullキーを許可あなたが重複するキー- Javaの
HashMap
は、新しいものと既存の値を置き換えます追加
- Javaの
- ヌルキーを追加しようとした場合の
- .NETの
Dictionary
はArgumentNullException
をスローします。 - は、インデックス付けを
[]
にすると、既存の値を新しい値に置き換えます。Add
メソッドを使用すると、代わりにArgumentException
がスローされます。存在しないキー- Javaの
HashMap
はnullを返します取得しようとすると
- Javaの
- 。
- .NETの
Dictionary
はKeyNotFoundException
を投げます。
MyObject value = null; if (!myDictionary.TryGetValue(key, value)) { /* key doesn't exist */ }
- Javaの
Dictionary
年代は、前の二つの問題に対処することができますContainsKey
方法があります:あなたはこれを避けるために、代わりに[]
インデックスのTryGetValue
方法を使用することができます。
はC# equivalent to Java HashMap
から私は「ヌル」キーを受け入れた辞書を必要としますが、ネイティブ一つでないように思わので、私は自分自身を書かれています。実際はとてもシンプルです。私はDictionaryから継承し、 "null"キーの値を保持するプライベートフィールドを追加して、インデクサーを上書きしました。これは次のようになります:
public class NullableDictionnary : Dictionary<string, string>
{
string null_value;
public StringDictionary this[string key]
{
get
{
if (key == null)
{
return null_value;
}
return base[key];
}
set
{
if (key == null)
{
null_value = value;
}
else
{
base[key] = value;
}
}
}
}
将来的に誰かに役立つことを願っています。
==========
私はこの形式に変更
public class NullableDictionnary : Dictionary<string, object>
オブジェクトを型パラメータにすることでジェネリックステーマを続行できませんでしたか? – colithium
これは機能しません。 public StringDictionary this [文字列キー] {... は にする必要があります。public String this [文字列キー] {。またベース[キー]は私の試行では機能しません。私はIDictionaryを実装し、グローバルなプライベートディクショナリオブジェクトを持ち、メソッドのそれぞれについてヌルケースを処理することをお勧めします。 –
なぜあなたは辞書のスペルミスを忘れてしまったのだろうと思います。 –
私はあなたが "codaddictのアルゴリズム"
"の例でそれを理解するのに役立ちましょう in C# 'は、C#で' ハッシュマップ in Java 'である。
一部の実装は異なります。よりよく理解するには、下の例を参照してください。
Map<Integer, Integer> pairs = new HashMap<Integer, Integer>();
はC#辞書を宣言:
Dictionary<int, int> Pairs = new Dictionary<int, int>();
ロケーションから値を取得する:
pairs.get(input[i]); // in Java
Pairs[input[i]]; // in C#
位置に値を設定する:
pairs.put(k - input[i], input[i]); // in Java
Pairs[k - input[i]] = input[i]; // in C#
のJava HashMapを宣言
全体的な例は、Codaddictのアルゴリズムの下で見ることができます。
codaddictのJavaにおけるアルゴリズム:C#で
import java.util.HashMap;
public class ArrayPairSum {
public static void printSumPairs(int[] input, int k)
{
Map<Integer, Integer> pairs = new HashMap<Integer, Integer>();
for (int i = 0; i < input.length; i++)
{
if (pairs.containsKey(input[i]))
System.out.println(input[i] + ", " + pairs.get(input[i]));
else
pairs.put(k - input[i], input[i]);
}
}
public static void main(String[] args)
{
int[] a = { 2, 45, 7, 3, 5, 1, 8, 9 };
printSumPairs(a, 10);
}
}
Codaddictのアルゴリズム
using System;
using System.Collections.Generic;
class Program
{
static void checkPairs(int[] input, int k)
{
Dictionary<int, int> Pairs = new Dictionary<int, int>();
for (int i = 0; i < input.Length; i++)
{
if (Pairs.ContainsKey(input[i]))
{
Console.WriteLine(input[i] + ", " + Pairs[input[i]]);
}
else
{
Pairs[k - input[i]] = input[i];
}
}
}
static void Main(string[] args)
{
int[] a = { 2, 45, 7, 3, 5, 1, 8, 9 };
//method : codaddict's algorithm : O(n)
checkPairs(a, 10);
Console.Read();
}
}
答えは
辞書
です私の機能で
テイクを見、そのシンプルなアドオンは、リストは、私はちょうど私の2セントを与えたいと思った
public static bool HasDuplicates<T>(IList<T> items)
{
Dictionary<T, bool> mp = new Dictionary<T, bool>();
for (int i = 0; i < items.Count; i++)
{
if (mp.ContainsKey(items[i]))
{
return true; // has duplicates
}
mp.Add(items[i], true);
}
return false; // no duplicates
}
重複項目が含まれている場合、この関数はfalseを返し辞書
内で最も重要なメンバ関数を使用しています。
これは@Powerlordの答えによるものです。
nullの代わりに"null"を挿入します。
private static Dictionary<string, string> map = new Dictionary<string, string>();
public static void put(string key, string value)
{
if (value == null) value = "null";
map[key] = value;
}
public static string get(string key, string defaultValue)
{
try
{
return map[key];
}
catch (KeyNotFoundException e)
{
return defaultValue;
}
}
public static string get(string key)
{
return get(key, "null");
}
ハッシュテーブルを使用しますが、タイプセーフです。また、
int a = map.get(key);
//continue with your logic
ためのJavaコードは、最高のC#で、このように符号化される
:
int a;
if(dict.TryGetValue(key, out a)){
//continue with your logic
}
この方法では、スコープ変数の必要性を「」ブロックの内部をすることができますし、後で必要になる場合は、ブロックの外側に引き続きアクセスできます。
- 1. Object Javaクラス相当のC++
- 2. Objective-C相当のJavaバイト[]
- 3. C#Message.CreateMessage()Android/Java相当品
- 4. JavaのHashMap Collectionに相当するBlackberry APIは何ですか?
- 5. Java述語に相当するC/C++
- 6. JavaのC++バリデーションテンプレートに相当します。
- 7. Javaクラス<?>相当のC#
- 8. AESのJava SecretKeySpecに相当するC#
- 9. C#でJavaの "ByteBuffer.putType()"に相当する
- 10. JavaのCharacter.digitに相当するC#
- 11. C#のJavaマップに相当する
- 12. Objective-Cに相当するJavaのInteger.toOctalString()?
- 13. C++でJavaのIllegalArgumentExceptionに相当する
- 14. Objective-Cに相当するJavaのBlockingQueue?
- 15. Opencv C++のJava相当版Mat-> data []
- 16. C++ JavaのBlockingQueueに相当する
- 17. JavaのC++ map.lower_boundに相当します。
- 18. JavaのThread.setDefaultUncaughtExceptionHandler()に相当するC#?
- 19. Javaリソースに相当するC#
- 20. Javaに相当するC++ this
- 21. Javaに相当するcin(C++)
- 22. Java XDocletに相当するC++ツール
- 23. Javaに相当するC#Array.GetLength(i)
- 24. java相当のswfobject
- 25. JavaのHashMap定義の妥当性?
- 26. httplib相当のC
- 27. C#相当のAtlEscapeUrl
- 28. iif相当のC#
- 29. C#のByteBuffer.PutDouble相当
- 30. C++、C#のEncoding.ASCII.GetBytesに相当()
JAVA HashMapでnull値とnullキーを許可する完全一致はありません。http://download.oracle.com/javase/1.4.2/docs/api/java/util/HashMap.html –
はい、ディクショナリは近いですが正確ではありません。 – Powerlord
重複したキーを追加するとき、 'Dictionary'は例外をスローします。 –