我们假设我有一个班级:
public class Demo
{
public string Id { get; set; }
public string Value { get; set; }
}
然后是演示列表
List<Demo> demo = new List<Demo>();
该列表包含许多项目,其中许多都是重复项。
例如
Item1:
Id= 1;
Value = "Something"
Item2:
Id= 2;
Value = "Something else"
Item3:
Id= 3;
Value = "Something else in here"
Item4:
Id= 1;
Value = "Something"
................
ItemN:
Id= 2;
Value = "Something else"
如上所示,几乎没有相同的项目(相同的ID和值)。
现在我需要的是将其转换为Dictionary<string,string>
,显然可以摆脱重复。
BTW Id
是定义项目副本的字段。
编辑:
我已尝试按ID对列表进行分组,但我也不知道如何获取该值并使其成为词典
var grouped= demo.GroupBy(t => t.Id).ToList();
现在我可以grouped.Key
我有ID,但我怎么能得到这个值?
答案 0 :(得分:1)
我建议使用t(w %*% t(as.matrix(testset[,2:29]))) - svm.model$rho
:
V1 V2 V3 V4 V5
1 3191 172.58302 -1527.0875 -1301.15106 -767.5058 3451.69551
2 2159 1199.02091 -1782.2845 -1362.27901 -2257.9054 4132.92307
3 4295 1557.35203 -2374.2095 -1581.37368 -3601.2268 5963.68623
4 3843 433.74900 -1091.0102 -1296.25825 -1285.6248 3217.86395
5 4448 1184.22539 -1515.8411 -1708.36731 -2612.3417 4621.73283
现在,您可以通过以下方式获取给定Lookup<TKey, TValue>
的所有项目:
var idLookup = demo.ToLookup(d => d.Id);
如果它不包含此Id,则序列为空(ID
)。
如果您想要不同ID的数量:
IEnumerable<Demo> demoWithId2 = idLookup["2"];
如果您想要每个ID的值数:
demoWithId2.Any() == false
如果您希望int numberOfDistinctIDs = idLookup.Count;
为每个ID设置一个任意对象(第一个):
int numberOfDemoWithId2 = idLookup["2"].Count();
答案 1 :(得分:0)
只是ID,值是99.9%相同,但你永远不知道 ID是检查它是否重复的ID
使用GroupBy
根据Id
获取不同的值,然后从组中获取第一个对象,并在ToDictionary
中获取其值,如:
Dictionary<string, string> dictionary = demo.GroupBy(d => d.Id)
.ToDictionary(grp => grp.Key, grp => grp.First().Value);
这将从第一个分组元素中获取Value
。
答案 2 :(得分:0)
请试试这个......
lst.GroupBy (l => l.Id)
.Select (g => lst.First (l => l.Id==g.Key))
.ToDictionary (l => l.Id, l=>l.Value);
答案 3 :(得分:0)
您可以让Demo
类继承自IEquatable
并让其实施Equals()
和GetHashCode()
,如下所示:
public class Demo : IEquatable<Demo>
{
public string Id { get; set; }
public string Value { get; set; }
public bool Equals(Demo other)
{
if (ReferenceEquals(other, null))
return false;
if (ReferenceEquals(this, other))
return true;
return other.Id == Id;
}
public override int GetHashCode()
{
return Id.GetHashCode();
}
}
这样您就可以在.Distinct()
上致电List
,然后转换为Dictionary
,如下所示:
List<Demo> demo = new List<Demo>
{
new Demo { Id = "1", Value = "Something" },
new Demo { Id = "2", Value = "Something else" },
new Demo { Id = "3", Value = "Something else in here" },
new Demo { Id = "1", Value = "Something" },
};
Dictionary<string, string> demoDictionary = demo.Distinct().ToDictionary(d => d.Id, d => d.Value);
demoDictionary.Keys.ToList().ForEach(k => Console.WriteLine("Key: {0} Value: {1}", k, demoDictionary[k]));
结果:
Key: 1 Value: Something
Key: 2 Value: Something else
Key: 3 Value: Something else in here