public Material
{
public MaterialType MaterialKind {get;set;}
}
enum MaterialType
{
Iron,
Plastic,
Carbon,
Wood
}
Run Code Online (Sandbox Code Playgroud)
我有一个材料项目列表.
var items = new List<Material>
{
new Material{ MaterialKind = MaterialType.Iron},
new Material{ MaterialKind = MaterialType.Plastic},
new Material{ MaterialKind = MaterialType.Carbon},
new Material{ MaterialKind = MaterialType.Iron},
new Material{ MaterialKind = MaterialType.Wood},
}
Run Code Online (Sandbox Code Playgroud)
每种类型在材料清单中应该只有一次可用的最大值.
我怎么写这个:
bool isItemsListDistinct =材料.??
上述样本至少有一个副本,即"Iron",因此返回值必须为false.
像这样的东西(Linq):
bool isItemsListDistinct = !materials
.GroupBy(item => item)
.Any(chunk => chunk.Skip(1).Any());
Run Code Online (Sandbox Code Playgroud)
说明:chunk.Count() > 1可能带来开销(想象Count()返回1234567,内部表示是一个链表),所以安全方式是检查第一个之后是否有项目:chunk.Skip(1).Any().
编辑:即使目前实施GroupBy()中的LINQ到对象没有问题Count():
http://referencesource.microsoft.com/#System.Core/System/Linq/Enumerable.cs,7bb231e0604c79e3
internal class Grouping : IGrouping<TKey, TElement>, IList<TElement> {
...
internal int count;
...
// No overhead in such implementation
int ICollection<TElement>.Count {
get { return count; }
}
...
}
Run Code Online (Sandbox Code Playgroud)
使用Any(),Exists(在SQL中)等而不是Count()集合是/(可以)依赖于实现是一个很好的做法.
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |