我有以下C#类:
class BatchData
{
public string batchNumber { get; set; }
public string processDate { get; set; }
public int TotalRecords { get; set; }
public int SuccessCount { get; set; }
}
和字典:
Dictionary<int, BatchData> BatchData = new Dictionary<int, BatchData>();
现在,我想搜索整个字典以查看值
x
保存在:
BatchData.batchNumber
例如
整个字典,如果
BatchData.batchNumber = x
我知道Dictionary有一个方法
.contains
但我不确定如何应用此功能。
编辑:
BatchData.batchNumber = x
可以在字典中多次出现
答案 0 :(得分:5)
你可以这样做:
Dictionary<int, BatchData> BatchData = new Dictionary<int, BatchData>();
BatchData.Add(1, new BatchData { batchNumber = "x"});
var hasX = BatchData.Values.Any(x=>x.batchNumber == "x"); //true;
例如:
{{1}}
答案 1 :(得分:3)
字典是KeyValuePair
个对象的集合,每个对象都有Key
属性(在您的情况下为int
)和Value
属性(a { {1}}对象)。
该批次编号可能有多个条目。如果您只想查看任何键是否包含该号码,您可以使用
BatchData
如果您希望具有该批号的所有键值对,请更改为batchData.Any(kvp => kvp.Value.batchNumber == x);
:
Where
您也可以根据需要使用batchData.Where(kvp => kvp.Value.batchNumber == x);
,First
等。
答案 2 :(得分:1)
您应该使用batchNumber
作为词典的关键词:
Dictionary<string, BatchData> BatchData = new Dictionary<string, BatchData>();
BatchValues.Add(batch1.batchNumber, batch1);
BatchValues.Add(batch2.batchNumber, batch2);
BatchValues.Add(batch3.batchNumber, batch3);
...
然后检查是否存在是O(1)操作(link):
BatchValues.ContainsKey(batchNumber);
答案 3 :(得分:0)
您可以使用Contains
中的System.Linq
方法使用另一个解决方案。
首先,您需要实现IEqualityComparer<>
接口
public class BatchDataComparer : IEqualityComparer<KeyValuePair<int, BatchData>>
{
public bool Equals(KeyValuePair<int, BatchData> x, KeyValuePair<int, BatchData> y)
{
return (x.Value.batchNumber == y.Value.batchNumber);
}
public int GetHashCode(KeyValuePair<int, BatchData> obj)
{
//or something else what you need
return obj.Value.batchNumber.GetHashCode();
}
}
之后,你可以像这样从Dictionary获得价值:
private static void Main(string[] args)
{
Dictionary<int, BatchData> dic = new Dictionary<int, BatchData>();
dic.Add(1, new BatchData() { batchNumber = "x" });
dic.Add(2, new BatchData() { batchNumber = "y" });
dic.Add(3, new BatchData() { batchNumber = "z" });
bool contain = dic.Contains(new KeyValuePair<int, BatchData>(100, new BatchData()
{
batchNumber = "z"
}), new BatchDataComparer());
Console.ReadKey();
}
public class BatchData
{
public string batchNumber { get; set; }
public string processDate { get; set; }
public int TotalRecords { get; set; }
public int SuccessCount { get; set; }
}