如何使用true和false条件进行foreach循环



这是我的代码。我想要一个与此相同的输出。

int i = 1;
List<char> cccc = new List<char>();
List<char> aaaa = new List<char>(){'H','e','l','l','o','g','o','o','d','m','o','r','n','i','n'};
List<char> dddd = new List<char>(){'e','l','g','o','d'};
while (i <=  aaaa.Count()) 
{
foreach(char ch in dddd)
{   
bool a = aaaa.Any(c => aaaa.Contains(ch));
if (aaaa.Contains(ch))
{
cccc.Add(ch);
}
else
{
cccc.Add('-');
}
i++;
}       
}
cccc.ForEach(x=>{
Console.Write(x+" ");
});

如果dddd数据在aaaa中,则cccc数据将保留,而如果为false,则将被'-'替换。

让我们看看在没有编程的情况下如何解决这个问题,并且您可以通过在伪代码中应用类似的过程来解决它:

(1( 检查aaaa中的每个字符

(2( 如果字符存在于dddd中,则将其保持为

(3( 否则,输出-而不是

我们可以通过使用forforeachwhile循环在aaaa上迭代来求解(1(,如@Arphile和您的解决方案中所示。

另一方面,我们也可以通过使用(1(中类似的方法来求解(2(,因为我们需要在dddd上迭代以查找是否存在匹配。幸运的是,我们可以通过使用Contains来节省这项工作,如@Arphile的回答所示。

最后,条件可以使用if-else或elvis/条件运算符?:来实现。

将所有这些与LINQ结合起来,我们将得到这样的东西:

char[] charList = new [] { 'H','e','l','l','o','g','o','o','d','m','o','r','n','i','n','g' };
char[] allowedChars = new [] { 'e','l','g','o','d' };
IEnumerable<char> filteredChars = charList.Select(c => allowedChars.Contains(c) ? c : '-');
// Output : -,e,l,l,o,g,o,o,d,-,o,-,-,-,-,g
Console.WriteLine(string.Join(",", filteredChars));

旁注:如果您想将过滤后的字符保留在数组中,则可以附加ToArray

List<char> output = new List<char>();
List<char> input = new List<char>() { 'H', 'e', 'l', 'l', 'o', 'g', 'o', 'o', 'd', 'm', 'o', 'r', 'n', 'i', 'n' };
List<char> compare = new List<char>() { 'e', 'l', 'g', 'o', 'd' };
foreach(char curr in input)
{
bool isCurrInCompare = compare.Any(x => x.Equals(curr));
if (isCurrInCompare)
output.Add(curr);
else
output.Add('-');
}
output.ForEach(x => Console.Write(x + " "));

因为我认为这是家庭作业的一部分,所以我不会给你一个完美的解决方案。

但是,我认为这段代码将引导您找到解决方案。

List<char> aaaa = new List<char>(){'H','e','l','l','o','g','o','o','d','m','o','r','n','i','n'};
List<char> dddd = new List<char>(){'e','l','g','o','d'};
for ( int i = 0 ; i < aaaa.Count; i++ ) {
if ( !dddd.Contains(aaaa[i])) { // if a char is not contained in dddd
Console.Write('-');
}
else { // if a char is contained in dddd
Console.Write(aaaa[i]);
}
}

如果dddd包含aaaa的字符,则此代码将打印为已替换。

输出为"-ellogood-o-----">

希望这段代码能对你有所帮助。

List<decimal> money= new List<decimal>();
int k = 1;
while (k <= arrayresult.Count())
{
foreach (transaction_details txn in transactions)
{
if (arrayresult.Contains(txn .Transdate.ToString("yyyy-MM-dd")))
{
var a = txn .Transdate.ToString("yyyy-MM-dd");
money.Add(txn .Debit);
}
else
{
var b = "";
money.Add(0);
}
k++;
}

}
// arrayresult is a list of dates. 

最新更新