Bir elementning bir elementi yoki boshqa qator elementlarining bir qismi c # ga mos kelishi qanday tekshiriladi?

Menda string majmuasi bor,

string[] numbers= {"one","two","last"}

Boshqa qatorlar qatori bor,

string[] variables={"string one","int two","string three"}

numbers qator elementlariga ega bo'lgan variables qatorini qanday qilib olishim mumkin?

Natijada "string one", "int two" elementlarini olish kerak. Va bu elementlarni argumentlari qatoridan olib tashlash va qolgan elementlarni yangi qatorda saqlash kerak. Ya'ni, yangi qator,

string[] newarray={"string three"}

Quyidagi kodni ishlatganman. Lekin aniq natijaga erisha olmadi.

foreach (string variable in variables)
{
if(!variable .Contains(numbers.Any())
     {
       newarray.add(param);
     }
 }

Oldindan rahmat.

1

6 javoblar

string[] numbers= {"one","two","last"};
string[] variables={"string one","int two","string three"};
string [] variablesWithNumbers = variables.Where(t=>numbers
    .Any(u=>t.Contains(u))).ToArray();
string[] newarray = variables.Where(t=>!numbers
    .Any(u=>t.Contains(u))).ToArray();  

here is the code in csharpad with print http://csharppad.com/gist/989bbe7e439990bc1f993f46d3e64fe8

2
qo'shib qo'ydi

Linq sizga buni amalga oshirishning ko'p yo'llarini beradi ... Yana bir yo'lni ta'qib qilishingiz mumkin:

var itemsToDiscard = variables.Zip(numbers, (f, s) => !f.Contains(s)).ToArray();
var newArray = variables.Where((_, i) => itemsToDiscard[i]).ToArray();

Muammoingiz unchalik aniq emasligini unutmang. Lavozim mazmunlimi? Quyidagi biron bir o'yinni topish kerakmi yoki yo'qmi?

{"zero", "one", "two"}
{"string one","int two","string three"}

Men taklif qilgan yechimim shunday emas, lekin agar siz buni istasangiz, uning aniq emas. Buyurtmaning ahamiyati kam bo'lsa, ekvivalent kod quyidagicha bo'ladi:

var itemsToDiscard = numbers.Select(n => variables.All(s => !s.Contains(n))).ToArray();
var resultWithoutPosition = variables.Where((_, i) => itemsToDiscard[i]).ToArray();
1
qo'shib qo'ydi
Vazifa mening ishimda muhim emas.
qo'shib qo'ydi muallif Malai, manba
string[] numbers = { "one", "two", "last" };
string[] variables = { "string one", "int two", "string three" };
string[] newarray = variables.Where(v => !numbers.Any(n => v.Contains(n))).ToArray();
variables = variables.Where(v => numbers.Any(n => v.Contains(n))).ToArray();
1
qo'shib qo'ydi

Buni misol uchun qilishingiz mumkin:

var result = variables.Where(v=>v.Split(' ').Any(s=>numbers.Contains(s)));
1
qo'shib qo'ydi

Buni sinashingiz mumkin:

var newarray = variables.Where(v => !numbers.Any(n => v.IndexOf(n) >= 0).ToArray()
1
qo'shib qo'ydi

Buni ko'ring

var result = variables.Except(variables.Intersect(numbers, new ContainsComparer())).ToArray();

Bu bilan

private class ContainsComparer : IEqualityComparer {
  public bool Equals(string x, string y) => y.Contains(x);
  public int GetHashCode(string obj) => 0;
}
0
qo'shib qo'ydi