【问题标题】:How to make a foreach loop with true and false condition? [closed]如何制作具有真假条件的foreach循环? [关闭]
【发布时间】:2020-11-24 02:18:53
【问题描述】:

这是我的代码。我想要一个与此相同的输出。 ['-','e','l','l','o','-','o','o','d','-','o','-',' -','-','-','g']

        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,它将替换为 '-'。

【问题讨论】:

  • 这是作业吗?
  • @Arphile 之类的。
  • 为什么你使用 while 而不是 for 甚至你使用 i 作为索引?
  • 您也可以将 List 替换为字符串。
  • @Arphile 即使我不知道。从来没有意识到。 xD

标签: c# arrays list model-view-controller foreach


【解决方案1】:

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

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

    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----'

希望此代码对您有所帮助。

【讨论】:

  • 我添加了我的真实代码
【解决方案2】:
                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. 

【讨论】:

  • @Arphile 这是我的真实代码。不能申请urs。
  • 我绝对不明白确切的问题是什么。不清楚你想做什么。
【解决方案3】:

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

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

(2)如果dddd中存在该字符,则保持原样

(3) 否则输出-

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

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

最后,可以使用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

【讨论】:

  • 我怎样才能将这个“IEnumerable filteredChars = charList.Select(c => allowedChars.Contains(c) ? c : '-')” 应用到这个 transaction_details txn 中?其中交易有借方价值,我将插入另一个列表。
  • 恐怕您需要创建另一个问题来解决您面临的问题,因为它超出了您之前提出的问题的范围。请查看this 了解更多信息。
【解决方案4】:
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 + " "));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-02
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多