我是在 C# 中使用 linq 的初學者。當參考串列中存在專案的第二個資料時,我想使用 linq 連接串列中的相同專案。我嘗試通過使用分隔符拆分來選擇新串列,但我無法獲得預期的結果。
您可以在下面找到我使用的代碼:
using System;
using System.Collections.Generic;
using System.Linq;
public class Program
{
List<String> ref_list = new List<String>();
List<String> new_list = new List<String>();
String exist_pattern = "|T";
public bool CheckExistData(String data)
{
if (ref_list.Any(item => item == data))
return true;
return false;
}
public void Main()
{
ref_list.Add("X2014");
ref_list.Add("PN14");
new_list.Add("new|P7787");
new_list.Add("data|987AA");
new_list.Add("pnal|PN14");
new_list.Add("mapping|884AW");
new_list.Add("larou|X2014");
new_list.Add("data2|PAWLL");
new_list= new_list.Select(r => string.Concat(r, "|T")).Where(s=> CheckExistData(s.Split('|')[1])).ToList();
}
}
預期結果 :
new|P7787
data|987AA
pnal|PN14|T
mapping|884AW
larou|X2014|T
data2|PAWLL
uj5u.com熱心網友回復:
如果您想使用 linq,則可以將其寫入 Select Part
new_list = new_list.Select(l => CheckExistData(l.Split('|')[1]) ? l exist_pattern : l).ToList();
uj5u.com熱心網友回復:
在您的情況下,我認為 for 回圈比 linq 更合適。linq 是一種查詢語言,但您想更新原始串列。
for (int i = 0; i < new_list.Count; i )
{
string item = new_list[i];
string[] parts = item.Split(new char[] { '|' });
//assert parts.Length == 2
if (ref_list.Contains(parts[1]))
{
new_list[i] = item exist_pattern;
}
}
如果你真的想要 linq,這里是代碼。但我真的認為第一種方法更好,更嚴格且可維護。
- linq 方式重新創建所有專案,想想如果你有數百萬個專案,但只有一個專案匹配,性能會更差。
- 如果您在檢查中還有其他邏輯而不僅僅是
Contains, more thantrueorfalse,那么在不引入第三種(包括匿名)型別或函式的情況下構建 linq 會更加困難。
new_list = new_list
.Select(x => ref_list.Contains(x.Split(new char[] { '|' })[1])
? x exist_pattern
: x)
.ToList();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/434730.html
