Пример #1
0
    private void Search(NamesBase namesBase, string username)
    {
        List <string> namesList = namesBase.names;

        NamesBase.Sex sex = namesBase.nameSex;
        string        usernameWithoutSpaces = username.Replace(" ", String.Empty);

        foreach (var name in namesList)
        {
            string bufName = usernameWithoutSpaces;
            bool   correct = false;
            foreach (char nameChar in name)
            {
                int index = bufName.IndexOf(nameChar);
                if (index == -1)
                {
                    correct = false;
                    break;
                }
                bufName = bufName.Remove(index, 1);
                correct = true;
            }
            if (correct)
            {
                if (bufName.Length > 1)
                {
                    //тут мы нашли имя.
                    //надо проверить нет ли его ещё в базе (может другого пола). Если нет, надо найти фамилию
                    List <NameSernamePare> nameSernamePare;
                    lock (result)
                    {
                        nameSernamePare = result.FindAll(x => x.name == name);
                    }

                    if (nameSernamePare.Count > 0)
                    {
                        if (nameSernamePare[0].sex != sex)
                        {
                            nameSernamePare.ForEach(x =>
                            {
                                lock (x)
                                {
                                    x.sex = NamesBase.Sex.Both;
                                }
                            });
                        }
                        else
                        {
                            Debug.LogWarning("Something wrong!");
                        }
                    }
                    else
                    {
                        if (sernamesBase.SernameList.Count > bufName.Length)
                        {
                            List <string> correctSernames = sernamesBase.SernameList[bufName.Length - 1].sernames;
                            foreach (string sername in correctSernames)
                            {
                                string leftChars = bufName; //оставшиеся символы
                                foreach (char sernameChar in sername)
                                {
                                    int index = leftChars.IndexOf(sernameChar);
                                    if (index != -1)
                                    {
                                        leftChars = leftChars.Remove(index, 1);
                                    }
                                    else
                                    {
                                        break;
                                    }
                                }
                                if (leftChars.Length == 0)
                                {
                                    lock (result)
                                    {
                                        result.Add(new NameSernamePare(name, sername, sex));
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
Пример #2
0
 public NameSernamePare(string name, string sername, NamesBase.Sex sex)
 {
     this.name    = name;
     this.sername = sername;
     this.sex     = sex;
 }