0
私は辞書でグループを行う必要があり、キー、値を持つ別の辞書にグループに基づいて結果の行を取得する必要がありますペア、値はリスト(位置)です。私はリスト(ポジション)として値1、値と値オブジェクトを持つキーオブジェクトを持つ別の辞書を持っているしたいと思う結果でgroup by辞書でクラスキー、値オブジェクトlinqを使用
public class Positions
{
public string Value1 { get; set; }
public int Value2 { get; set; }
public string Value3 { get; set; }
public string Value4 { get; set; }
public string Value5 { get; set; }
public string Value6 { get; set; }
public string Value7 { get; set; }
public string Value8 { get; set; }
public string Value9 { get; set; }
public string Value10 { get; set; }
public string Value11 { get; set; }
public string Value12 { get; set; }
}
public struct PositionKey
{
public string Value1 { get; set; }
public int Value2 { get; set; }
public string Value3 { get; set; }
public string Value4 { get; set; }
public string Value5 { get; set; }
public string Value6 { get; set; }
public override int GetHashCode()
{
return (Value1 != null ? Value1.GetHashCode() : 1)
^(Value2 > 0 ? Value2.GetHashCode() : 1)
^(Value3 != null ? Value3.GetHashCode() : 1)
^(Value4 != null ? Value4.GetHashCode() : 1)
^(Value5 != null ? Value5.GetHashCode() : 1)
^(Value6 != null ? Value6.GetHashCode() : 1);
}
public override bool Equals(object obj)
{
PositionKey compositeKey = (PositionKey)obj;
return Value1 == compositeKey.Value1
&& Value2 == compositeKey.Value2
&& Value3 == compositeKey.Value3
&& Value4 == compositeKey.Value4
&& Value5 == compositeKey.Value5
&& Value6 == compositeKey.Value6;
}
}
public struct GroupbyPositionKey
{
public string Value1 { get; set; }
public int Value2 { get; set; }
public override int GetHashCode()
{
return (Value1 != null ? Value1.GetHashCode() : 1)
^(Value2 > 0 ? Value2.GetHashCode() : 1);
}
public override bool Equals(object obj)
{
PositionKey compositeKey = (PositionKey)obj;
return Value1 == compositeKey.Value1
&& Value2 == compositeKey.Value2;
}
}
public class program
{
/*
Value1 Value2 Value3 Value4 Value5 Value6 Value7 Value8 Value9 Value10 Value11 Value12
-------------------------------------------------------------------------------------------------
v1 1 val1 val2 val3 val4 val5 val6 val7 val8 val9 val10
v1 1 val2 val3 val4 val5 val6 val7 val8 val9 val10 val11
v3 4 val3 val4 val5 val6 val7 val8 val9 val10 val11 val12
v3 4 val4 val5 val6 val7 val8 val9 val10 val11 val12 val13
v3 5 val5 val6 val7 val8 val9 val10 val11 val12 val13 val14
v4 6 val6 val7 val8 val9 val10 val11 val12 val13 val14 val15
v4 6 val7 val8 val9 val10 val11 val12 val13 val14 val15 val16
v4 7 val8 val9 val10 val11 val12 val13 val14 val15 val16 val17
v4 7 val9 val10 val11 val12 val13 val14 val15 val16 val17 val18
Group by - Value1 Value2 Value3 Value4 Value5 Value6 Value7 Value8 Value9 Value10 Value11 Value12
Get List of the rows after the grouping on the basis of group by Value1,Value2
*/
public static void main()
{
Dictionary<PositionKey, Positions> dictPositons = new Dictionary<PositionKey, Positions>();
Positions obj = new Positions();
obj.Value1 = "v1";
obj.Value2 = 1;
obj.Value3 = "val1";
obj.Value4 = "val2";
obj.Value5 = "val3";
obj.Value6 = "val4";
obj.Value7 = "val5";
// ........ and so on.. and so forth...for all the objects.
/*
I have a datatable as above and i am inserting the rows in the collection object of class <Positions> with respective key
and add the same to the dictionary.
*/
PositionKey key = new PositionKey();
key.Value1 = "v1";
key.Value2 = 1;
key.Value3 = "val3";
key.Value4 = "val4";
key.Value5 = "val5";
key.Value6 = "val6";
if (!dictPositons.ContainsKey(key))
{
dictPositons.Add(key, obj); // this dictionary would have the raw data which would have all the rows from the table as a dictionary collection
}
/*
Now I have to create another dictionary which gives me a list of all the records by grouping on the basis
of the key <GroupbyPositionKey> which is nothing but <Value1,Value2>
The resulting dictionary should look like Dictionary<GroupbyPositionKey,List<Positions>>
*/
Dictionary<GroupbyPositionKey, List<Positions>> result = new Dictionary<GroupbyPositionKey, List<Positions>>();
result = dictPositions.GroupBy(....); // not sure how ?
}
}
:
は、ここに私の問題文を説明し、以下のコードスニペットです。私は希望の結果を得るために辞書でグループに近づく方法をよく分かりません。
私はすでに辞書を手作業でループし、新しいキーに基づいて他の辞書を選択して挿入することで、この結果を達成しました。しかし、これを行うLINQの方法があるかどうかを知りたかったので、はるかに短くなります。
を選択するために、を持っています。その後、私は2つのキーのセットだけでグループを適用したい。また、私はすでに手作業でこれを達成しています。だから私はLINQの方法が必要でした。 –
ToDictionary
メソッドを使用する必要があります。しかし、私はより大きな鍵のセット、すなわち全てのレコードを一意的に識別し、辞書に挿入することによって最初の辞書を塗りつぶす解決したい問題をより正確に示すために質問を更新できますか? – TomDoesCode
はい、質問を更新しました。更新が必要な場合は教えてください。 –