【问题标题】:I want to Generate Array From 'A' to 'ZZ' In Angular & C#. How it can be possible?我想在 Angular 和 C# 中生成从“A”到“ZZ”的数组。怎么可能?
【发布时间】:2022-01-13 02:29:09
【问题描述】:

我正在处理用户必须在 A 到 AZ 之间插入字符的项目。 前任。 如果用户输入这样的值

  • 字段 1= AA

  • 字段 2= AD

  • 然后我要生成AA,AB,AC,AD

【问题讨论】:

标签: c# arrays angular


【解决方案1】:
string start = "AD", end = "BC";

int p1 = int.Parse(string.Join("", start.Select(c => (int)c)));
int p2 = int.Parse(string.Join("", end.Select(c => (int)c)));
var range = Enumerable.Range('A', 26);
var combo = range.Select(c => ((char)c).ToString()).ToList();
combo.AddRange(
from r in range from r2 in range select string.Concat((char)r, (char)r2));
var results = combo.Where(l =>
{
    var v = int.Parse(string.Join("", l.Select(c => (int)c)));
    return v >= p1 && v <= p2;
});

Console.WriteLine(string.Join(",", results));

输出:AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,AR,AS,AT,AU,AV,AW,AX,AY,AZ,BA,BB,BC

解释:

取一对中每个字符的数值并将它们连接起来,例如

"AD" = "65" + "68" = 6568 (lower bound)
"BC" = "66" + "67" = 6667 (upper bound)

从生成的对 AA 到 ZZ 的列表中,使用上面相同的公式比较数值以获得所需的结果

"AA" = "65" + "65" = 6565 (outside bound)
"AB" = "65" + "65" = 6566 (outside bound)
...
"AD" = "65" + "68" = 6568 (inside bound)
...
"BD" = "66" + "68" = 6668 (outside bound)

【讨论】:

  • 这适用于 C# 吗?
  • 是的,它适用于 C#
  • 如果我需要使用此解决方案生成从 A 到 BB 的数组怎么办?
  • 当然,我已经更新了解决方案。现在您可以生成例如B 到 H 或 A 到 ZZ
【解决方案2】:

一个简单的嵌套循环应该可以做到。比如:

var alphabets = new List<string>();
for(int i = 65;i< 65+26;i++)
    for(int j = 65;j< 65+26;j++)
        alphabets.Add($"{(char)i}{(char)j}");

【讨论】:

  • 此解决方案有效,但它会生成从 AA 到 AZ 的数组。我想根据用户要求生成数组。如果用户从 AA 到 QA 输入,那么我必须生成从 AA 到 QA 的数组。
  • 您能否更新问题以显示这些用户要求的示例?您如何将这些要求传递给您的生成器方法?
  • 现在看看。我已经更新了问题。
【解决方案3】:

这应该可以得到你期望的值

public static void combination() {
            string[] letters = { "a", "b", "c", "d"... };
        List<string> combinations = new List<string>();
            for (int i = 0; i < letters.Length; i++)
            {
                for (int j=0; j<letters.Length; j++)
                {
                    combinations.Add(letters[i]+letters[j]);
                }
            }
        }

【讨论】:

  • 我想根据用户要求生成数组。如果用户从 AA 到 QA 输入,那么我必须从 AA、AB、AC、AD.... 到 QA 生成数组
【解决方案4】:

问题终于解决了。 分享我对 Angular 代码的回答。希望它也能帮助其他人。

数字转字符功能

   numberToCol(num) {
     var str = '', q, r;
     while (num > 0) {
       q = (num - 1) / 26;
       r = (num - 1) % 26
       num = Math.floor(q)
       str = String.fromCharCode(65 + r) + str;
     }
     return str;
   }

将字符转换为数字的函数

 GenerateAlphabeticArray(letter1, letter2) {
 
     let var1 = letter1.split('').reduce((r, a) => r * 26 + parseInt(a, 36) - 9, 0);
     let var2 = letter2.split('').reduce((r, a) => r * 26 + parseInt(a, 36) - 9, 0);
 
     let a = [];
 
     for (let i = var1; i <= var2; i++) {
       a.push(this.numberToCol(i))
     }
     console.log("AtoZData = ", a);
     return a;
   }

调用函数

this.GenerateAlphabeticArray('AA', 'AD');

输出

['AA', 'AB', 'AC', 'AD']

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多