如何从多个数组中找到单个字符串?

Posted

技术标签:

【中文标题】如何从多个数组中找到单个字符串?【英文标题】:How do I find a single string from multiple arrays? 【发布时间】:2022-01-09 07:10:39 【问题描述】:

我有这些三星 Galaxy A 系列机型

        /*            D E V I C E  M O D E L  L I S T           */

    // S A M S U N G

    //Galaxy A Series:

       //A0X
    string[] samsung_A01 =       "SM-A015A", "SM-A015AZ", "SM-A015F", "SM-A015G", "SM-A015M", "SM-A015T1", "SM-A015U", "SM-A015U1", "SM-A015V", "SM-A015V" ;
    string[] samsung_A01_Core =  "SM-A013F", "SM-A013G", "SM-A013M" ;
    string[] samsung_A02 =       "SM-A022F", "SM-A022G", "SM-A022M" ;
    string[] samsung_A02s =      "SM-A025A", "SM-A025AZ", "SM-A025F", "SM-A025G", "SM-A025M", "SM-A025U", "SM-A025U1", "SM-A025V", "SM-S124DL" ;
    string[] samsung_A03_Core =  "SM-A032F", "SM-A032M" ;
    string[] samsung_A03s =      "SM-A037F", "SM-A037G", "SM-A037M" ;
    
      //A1X
    string[] samsung_A10 =      "SM-A105F", "SM-A105FN", "SM-A105G", "SM-A105M", "SM-A105N" ;
    string[] samsung_A10e =     "SM-A102U", "SM-A102U1", "SM-A102W", "SM-A102W", "SM-S102DL", "SM-A102N", ;
    string[] samsung_A10s =     "SM-A107F", "SM-A107M" ;
    string[] samsung_A11 =      "SM-A115A", "SM-A115AP", "SM-A115AZ", "SM-A115F", "SM-A115M", "SM-A115U", "SM-A115U1", "SM-A115W" ;
    string[] samsung_A12 =      "SM-A125F", "SM-A125M", "SM-A125N", "SM-A127F", "SM-A127M", "SM-A125U", "SM-A125U1", "SM-A125W", "SM-S127DL" ;
    
      //A2X
    string[] samsung_A2_Core =  "SM-A260F", "SM-A260G" ;
    string[] samsung_A20 =      "SC-02M", "SCV46", "SCV46-j", "SCV46-u", "SM-A205F", "SM-A205FN", "SM-A205G", "SM-A205GN", "SM-A205W", "SM-A205YN", "SM-A205U", "SM-A205U1", "SM-S205DL" ;
    string[] samsung_A20e =     "SM-A202F" ;
    string[] samsung_A20s =     "SM-A2070", "SM-A207F", "SM-A207M" ;
    string[] samsung_A21 =      "SC-42A", "SCV49", "SM-A215U", "SM-A215U1", "SM-A215W", "SM-S215DL" ;
    string[] samsung_A21s =     "SM-A217F", "SM-A217M", "SM-A217N" ;
    string[] samsung_A22 =      "SM-A225F", "SM-A225M" ;
    string[] samsung_A22_5G =   "SC-56B", "SM-A226B", "SM-A226BR" ;
    string[] samsung_A22s_5G =  "SM-A226B" ;

      //A3X
    string[] samsung_A30 =      "SCV43", "SCV43-j", "SCV43-u", "SM-A305F", "SM-A305FN", "SM-A305G", "SM-A305GN", "SM-A305GT", "SM-A305N", "SM-A305YN" ;
    string[] samsung_A30s =     "SM-A307FN", "SM-A307G", "SM-A307GN", "SM-A307GN", "SM-A307GT" ;
    string[] samsung_A31 =      "SM-A315F", "SM-A315G", "SM-A315N" ;
    string[] samsung_A32 =      "SM-A325F", "SM-A325M", "SM-A325N" ;
    string[] samsung_A32_5G =   "SCG08", "SM-A326B", "SM-A326BR", "SM-A326U", "SM-A326U1", "SM-A326W", "SM-S326DL" ;

      //A4X
    string[] samsung_A40 =      "SM-A405FM", "SM-A405FN", "SM-A405S" ;
    string[] samsung_A40s =     "SM-A3051", "SM-A3058" ;
    string[] samsung_A41 =      "SC-41A", "SCV48", "SM-A415F" ;
    string[] samsung_A42_5G =   "SM-A4260", "SM-A426B", "SM-A426N", "SM-A426U", "SM-A426U1", "SM-S426DL" ;

      //A5X
    string[] samsung_A50 =     "SM-A505F", "SM-A505FM", "SM-A505FN", "SM-A505G", "SM-A505GN", "SM-A505GT", "SM-A505N", "SM-A505U", "SM-A505U1", "SM-A505W", "SM-A505YN", "SM-S506DL" ;
    string[] samsung_A50s =    "SM-A5070", "SM-A507FN" ;
    string[] samsung_A51 =     "SM-A515F", "SM-A515U", "SM-A515U1", "SM-A515W", "SM-S515DL" ;
    string[] samsung_A51_5G =  "SC-54A", "SCG07", "SM-A5160", "SM-A516B", "SM-A516N", "SM-A516U", "SM-A516U1", "SM-A516V" ;
    string[] samsung_A52 =     "SM-A525F", "SM-A525M" ;
    string[] samsung_A52_5G =  "SC-53B", "SM-A5260", "SM-A526B", "SM-A526N", "SM-A526U", "SM-A526U1", "SM-A526W", "SM-A528B", "SM-A528N" ;

      //A6X
    string[] samsung_A60 =  "SM-A6060", "SM-A606Y" ;
    
      //A7X
    string[] samsung_A70 =  "SM-A7050", "SM-A705F", "SM-A705FN", "SM-A705GM", "SM-A705MN", "SM-A705U", "SM-A705W", "SM-A705YN" ;
    string[] samsung_A70s =  "SM-A7070", "SM-A707F" ;
    string[] samsung_A71 =  "SM-A715F", "SM-A715W" ;
    string[] samsung_A71_5G =  "SM-A7160", "SM-A716B", "SM-A716U", "SM-A716U1", "SM-A716V" ;

      //A8X
    string[] samsung_A80 =  "SM-A8050", "SM-A805F", "SM-A805N" ;

      //A9X
    string[] samsung_A90_5G =  "SM-A9080", "SM-A908B", "SM-A908N" ;

我对其进行了编程以扫描手机模型,但我希望它检查模型是否与这些数组中的字符串之一匹配它会为其模型打开一个特定的面板,我已尝试使用

                adb_modelnum = modelnum.StandardOutput.ReadToEnd();

从手机中获取模型然后使用

                foreach (string adb_modelnum)
            
                if (stringToCheck.Contains(adb_modelnum))
                

                

但它给了我错误,有什么建议吗?

【问题讨论】:

看起来最好使用Dictionary<string, List<string>> 来保存数据。 或者,可能更好的是,创建一个具有可能名为 BaseName 和 ModelNames 的属性的类,然后制作该类的列表。 完全同意安德鲁的观点。如果我可以补充一下, Dictionary> 只是一种性能优化,可以更快地访问 List (其中 Model 是一个具有模型字符串的类(如“SM-A015A” ),系列的字符串(如“A01”)和供应商的字符串(如“Samsung”);其中每一个都只是其他集合的主键。看起来一些基本的数据库建模复习是按顺序排列的。字典相当于一个数据库index。在优化性能之前先追求正确性和简单性(例如:List 胜利的字典。像您这样的数组和结构是多余的,是维护的噩梦 【参考方案1】:

你必须连接所有数组,然后使用包含 Linq

samsung_A01.Concat(samsung_A01_Core)
....
.Contains(adb_modelnum)

【讨论】:

【参考方案2】:

您可以将所有这些数组合并为一个,然后使用 linq,您可以选择另一种结构来存储您的模型(请参阅 cmets),或者还有另一种方式,泛型。 我假设我的名为SamsungASeries 的类将只包含string[] 数组(您可以将这些数组封装到如下类中)

public class SamsungASeries

        /*            D E V I C E  M O D E L  L I S T           */

        // S A M S U N G

        //Galaxy A Series:

        //A0X
        string[] samsung_A01 =  "SM-A015A", "SM-A015AZ", "SM-A015F", "SM-A015G", "SM-A015M", "SM-A015T1", "SM-A015U", "SM-A015U1", "SM-A015V", "SM-A015V" ;
        string[] samsung_A01_Core =  "SM-A013F", "SM-A013G", "SM-A013M" ;
        string[] samsung_A02 =  "SM-A022F", "SM-A022G", "SM-A022M" ;
        string[] samsung_A02s =  "SM-A025A", "SM-A025AZ", "SM-A025F", "SM-A025G", "SM-A025M", "SM-A025U", "SM-A025U1", "SM-A025V", "SM-S124DL" ;
        string[] samsung_A03_Core =  "SM-A032F", "SM-A032M" ;
        string[] samsung_A03s =  "SM-A037F", "SM-A037G", "SM-A037M" ;

        //A1X
        string[] samsung_A10 =  "SM-A105F", "SM-A105FN", "SM-A105G", "SM-A105M", "SM-A105N" ;
        string[] samsung_A10e =  "SM-A102U", "SM-A102U1", "SM-A102W", "SM-A102W", "SM-S102DL", "SM-A102N", ;
        string[] samsung_A10s =  "SM-A107F", "SM-A107M" ;
        string[] samsung_A11 =  "SM-A115A", "SM-A115AP", "SM-A115AZ", "SM-A115F", "SM-A115M", "SM-A115U", "SM-A115U1", "SM-A115W" ;
        string[] samsung_A12 =  "SM-A125F", "SM-A125M", "SM-A125N", "SM-A127F", "SM-A127M", "SM-A125U", "SM-A125U1", "SM-A125W", "SM-S127DL" ;

        //A2X
        string[] samsung_A2_Core =  "SM-A260F", "SM-A260G" ;
        string[] samsung_A20 =  "SC-02M", "SCV46", "SCV46-j", "SCV46-u", "SM-A205F", "SM-A205FN", "SM-A205G", "SM-A205GN", "SM-A205W", "SM-A205YN", "SM-A205U", "SM-A205U1", "SM-S205DL" ;
        string[] samsung_A20e =  "SM-A202F" ;
        string[] samsung_A20s =  "SM-A2070", "SM-A207F", "SM-A207M" ;
        string[] samsung_A21 =  "SC-42A", "SCV49", "SM-A215U", "SM-A215U1", "SM-A215W", "SM-S215DL" ;
        string[] samsung_A21s =  "SM-A217F", "SM-A217M", "SM-A217N" ;
        string[] samsung_A22 =  "SM-A225F", "SM-A225M" ;
        string[] samsung_A22_5G =  "SC-56B", "SM-A226B", "SM-A226BR" ;
        string[] samsung_A22s_5G =  "SM-A226B" ;

        //A3X
        string[] samsung_A30 =  "SCV43", "SCV43-j", "SCV43-u", "SM-A305F", "SM-A305FN", "SM-A305G", "SM-A305GN", "SM-A305GT", "SM-A305N", "SM-A305YN" ;
        string[] samsung_A30s =  "SM-A307FN", "SM-A307G", "SM-A307GN", "SM-A307GN", "SM-A307GT" ;
        string[] samsung_A31 =  "SM-A315F", "SM-A315G", "SM-A315N" ;
        string[] samsung_A32 =  "SM-A325F", "SM-A325M", "SM-A325N" ;
        string[] samsung_A32_5G =  "SCG08", "SM-A326B", "SM-A326BR", "SM-A326U", "SM-A326U1", "SM-A326W", "SM-S326DL" ;

        //A4X
        string[] samsung_A40 =  "SM-A405FM", "SM-A405FN", "SM-A405S" ;
        string[] samsung_A40s =  "SM-A3051", "SM-A3058" ;
        string[] samsung_A41 =  "SC-41A", "SCV48", "SM-A415F" ;
        string[] samsung_A42_5G =  "SM-A4260", "SM-A426B", "SM-A426N", "SM-A426U", "SM-A426U1", "SM-S426DL" ;

        //A5X
        string[] samsung_A50 =  "SM-A505F", "SM-A505FM", "SM-A505FN", "SM-A505G", "SM-A505GN", "SM-A505GT", "SM-A505N", "SM-A505U", "SM-A505U1", "SM-A505W", "SM-A505YN", "SM-S506DL" ;
        string[] samsung_A50s =  "SM-A5070", "SM-A507FN" ;
        string[] samsung_A51 =  "SM-A515F", "SM-A515U", "SM-A515U1", "SM-A515W", "SM-S515DL" ;
        string[] samsung_A51_5G =  "SC-54A", "SCG07", "SM-A5160", "SM-A516B", "SM-A516N", "SM-A516U", "SM-A516U1", "SM-A516V" ;
        string[] samsung_A52 =  "SM-A525F", "SM-A525M" ;
        string[] samsung_A52_5G =  "SC-53B", "SM-A5260", "SM-A526B", "SM-A526N", "SM-A526U", "SM-A526U1", "SM-A526W", "SM-A528B", "SM-A528N" ;

        //A6X
        string[] samsung_A60 =  "SM-A6060", "SM-A606Y" ;

        //A7X
        string[] samsung_A70 =  "SM-A7050", "SM-A705F", "SM-A705FN", "SM-A705GM", "SM-A705MN", "SM-A705U", "SM-A705W", "SM-A705YN" ;
        string[] samsung_A70s =  "SM-A7070", "SM-A707F" ;
        string[] samsung_A71 =  "SM-A715F", "SM-A715W" ;
        string[] samsung_A71_5G =  "SM-A7160", "SM-A716B", "SM-A716U", "SM-A716U1", "SM-A716V" ;

        //A8X
        string[] samsung_A80 =  "SM-A8050", "SM-A805F", "SM-A805N" ;

        //A9X
        string[] samsung_A90_5G =  "SM-A9080", "SM-A908B", "SM-A908N" ;
    

然后你可以获取所有私有字段,将它们转换为字符串数组并尝试找到你的模型。这是来自控制台应用程序的 sn-p。

static void Main(string[] args)

        var expectedModel = "SM-A015AZ";
        var series = new SamsungASeries();
        var allFields = series.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);

        string model = null;
        foreach (var item in allFields)
        
            var modelArray = (string[])item.GetValue(series);
            model = modelArray.FirstOrDefault(x => x.Equals(expectedModel));
            if(model != null)
            
                break;
            
        

        if(model != null)
        
            Console.WriteLine($"Found: model");
        
        else
        
            Console.WriteLine($"Not Found");
        

        Console.ReadKey(true);
 

不是最好的方法,但我认为是最快的方法(如果您不想重构代码)。

【讨论】:

以上是关于如何从多个数组中找到单个字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 React 中的数组中获取值? [关闭]

BERT - 从多个输出与单个输出中提取 CLS 嵌入

如何在javascript中从多个数组中获取单个数组[重复]

如何从字符串中找到数组? [复制]

如何在 C++ 中从字节数组(在 BIG-ENDIAN 中)中提取单个字段

如何从单个文本文件中同时打印字符串和整数?