[英]Compare multiple element in a list
我想從列表中提取尊重不同標准的元素的數據,如下所示:
我的清單包含:
1, name1, Time, quantity
2, name2, Time, quantity
3, name1, Time+1, quantity+1
4, name2, Time+1, quantity+1
....
我的目標:
if (MyList.Contains(name1 && name2))
{
if (name1(quantity) == name2(quantity) && name1(Time) == name2(Time))
{
return quantity;
}
}
我如何創建我的列表:
public class OCO1 : IEquatable<OCO1>
{
public DateTime OrderCreatedTime {get; set;}
public int ID {get; set;}
public decimal Quantity {get; set;}
public string Tag {get; set;}
public override string ToString()
{
return "ID: " + ID + " Name: " + Tag;
}
public override bool Equals(object obj)
{
if (obj == null) return false;
OCO1 objAsOCO1 = obj as OCO1;
if (objAsOCO1 == null) return false;
else return Equals(objAsOCO1);
}
public override int GetHashCode()
{
return ID;
}
public bool Equals(OCO1 other)
{
if (other == null) return false;
return (this.ID.Equals(other.ID));
}
// Should also override == and != operators.
}
public partial class Base
{
List<OCO1> CreatedTimeOrder = new List<OCO1>();
if (order.Tag.Equals("name1"))
{
CreatedTimeOrder.Add( new OCO1() {OrderCreatedTime = order.CreatedTime, ID = order.Id, Quantity = order.Quantity, Tag = "name1"});
}
if (order.Tag.Equals("name2"))
{
CreatedTimeOrder.Add( new OCO1() {OrderCreatedTime = order.CreatedTime, ID = order.Id, Quantity = order.Quantity, Tag = "name2"});
}
我不知道該怎么做。 任何幫助不勝感激!
“編輯帖子 jskfjhsfsjfsgfghsfshsfghjsfgsdsjffsgfgsgfyjhdfusygfyusgfuygfgsdvfvsdufvusvfuvsufvyusdfgyugfdyugfusgfuysfgusfgusgfuysgfgsugfusgfugfgsfgufgusfugydsfg 的更多詳細信息”
根據作者的評論:
如果 name1 和 name2 的時間相同,我想獲取數量。 我不明白如何解釋它。
想象一下這個 class,為了這個答案的簡單而縮寫。
public class Data
{
public string Name { get; set; }
public int Time { get; set; }
}
還有這個合集
List<Data> list = new List<Data>() {
new Data() { Name = "Name1", Time = 1 },
new Data() { Name = "Name2", Time = 2 },
new Data() { Name = "Name3", Time = 3 },
new Data() { Name = "Name4", Time = 4 },
};
你可以用 LINQ
string searchArray = new string[] { "Name1", "Name2" };
// Filtering only elements with Name equals name1 or name2
var filtered = list.Where(d => searchArray.Contains(d.Name));
if(filtered.GroupBy(d => d.Time).Count() == 1) // If there is only one group of Time
return filtered.Sum(d => d.Time); // it will return 3 (1 + 2)
else
// do another thing
如果我理解這個問題,您希望找到所有具有相同Quantity
和Time
值,並且同時包含"name1"
和"name2"
的記錄,並且對於每個記錄,您希望 select 的Quantity
屬性。
如果這是正確的,我們可以使用一點System.Linq
來按它們的OrderCreatedTime
和Quantity
屬性對項目進行分組,過濾到僅具有至少一個具有每個所需名稱的項目的組,然后 select 組中的Quantity
屬性:
List<decimal> relevantQuantities = CreatedTimeOrder
.GroupBy(item => new {item.OrderCreatedTime, item.Quantity})
.Where(group => group.Any(item => item.Tag == "name1") &&
group.Any(item => item.Tag == "name2"))
.Select(g => g.Key.Quantity)
.ToList();
如果這不正確,請准確說明您期望返回的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.