Проверка на наличие в [,] массиве

359
28 октября 2017, 14:13

Есть переменная, допустим string s = "/87536464", необходимо проверить её на наличие в первом столбце [,] массива и в случае, если такого значения там нет, то записать.

Как подобное делается ?

UPD:
Совсем туго с проф. языком, попробую объяснить иначе:

Я получаю данные в одномерный массив, затем переписываю их в двумерный массив (в первый столбец), потом получаю еще одномерный массив и мне надо продолжить запись в двумерный массив только тех значения из одномерного массива, которых ещё нет в двумерном.

Вот как раз значение "/87536464" одно из значений одномерного массива.

Я присваиваю переменной это значение эначение string s = "/87536464" и вот эту мать её переменную мне надо проверить на наличие в двумерном массиве.

И если она там есть, получить ответ true если её там нет false - вот и всё.

UPD Вот как из массива Ssilki[] получить в массив 'Baza[]' только те значения, которых нет в 'Baza[]' , т.е. не дублировать одни и те же.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp7
{
    class Program
    {
        static void Main(string[] args)
        {
            string[] Ssilki = new string[5];
            Ssilki[0] = "1000";
            Ssilki[1] = "2000";
            Ssilki[2] = "3000";
            Ssilki[3] = "4000";
            Ssilki[4] = "5000";
            string[,] Baza = new string[100, 20];
            Baza[0, 0] = "1000";
            Baza[1, 0] = "3000";
        }
    }
}
Answer 1

Т.к. постановка вопроса не совсем понятная, я сделал простой вариант когда есть массив строк и массив дополнительных строк, нужно в первый добавить только те строки второго массива которые в первом не встречаются. Использовал HashSet для того чтобы алгоритм был быстрый для случая когда много строк, если строк мало и скорость не важна можно проверять и через List.Contains или просто циклом.

Вот моё решение на C#, можно запустить онлайн:

using System;
using System.Collections.Generic;
class CheckStrings
{
    static void Main() 
    {
        string[] strs = {"ab", "cd"};
        string[] to_add = {"cd", "ef"};
        HashSet<string> checker = new HashSet<string>();
        foreach (string s in strs) checker.Add(s);
        List<string> strs_list = new List<string>(strs);
        foreach (string s in to_add) {
            if (!checker.Contains(s)) {
                strs_list.Add(s);
                checker.Add(s);
            }
        }
        strs = strs_list.ToArray();
        foreach (string s in strs) Console.Write(s + " ");
    }
}

Дополнение: вроде уточнились с постановкой задачи, код выше я переписал для двумерного массива, вот что получилось, можно запустить онлайн:

using System;
using System.Collections.Generic;
class CheckStrings
{
    static void Main() 
    {
        string[,] strs = {
          {"ab", null},
          {"cd", null},
          {null, null},
          {null, null},
        };
        int n = 2; // Initial number of strings in strs.
        string[] to_add = {"cd", "ef"};
        HashSet<string> checker = new HashSet<string>();
        for (int i = 0; i < n; ++i) checker.Add(strs[i, 0]);
        foreach (string s in to_add) {
            if (!checker.Contains(s)) {
                strs[n, 0] = s;
                checker.Add(s);
                ++n;
            }
        }
        for (int i = 0; i < n; ++i) Console.Write(strs[i, 0] + " ");
    }
}
Answer 2

Вот, обход каждого первого элемента строки двумерного массива с заменой если не соответствует: (Изменен)

bool ContainsValue(string arg, string[,] mas)
{       
    bool res = false;
    for (int i = 0; i < mas.GetLength(0); i++)
        for (int j = 0; j < mas.GetLength(1); j++)
            if (mas[i, j].Equals(arg))
            {
                res = true;
                break;
            }
    return res;
}
bool ContainsFirstColumn(string arg, string[,] mas)
{
    bool res = false;
    for (int i = 0; i < mas.GetLength(0); i++)
        if (mas[i, 0].Equals(arg))
        {
            res = true;
            break;
        }
    return res;
}
Answer 3
bool SetString(string[,] array, string str, int index)
{
   for (int i = 0; i < array.GetLength(0); i++)
      if (array[i,index] != null)
      {
         if (array[i,index] == str)
            return false;
      }
      else
      {
         array[i,index] = str;
         return true;
      }
   return false;
}

Как я понял - вам нужно это.

UPD. Немного обновил. В случае неравномерного заполнения столбца (если в начале может оказаться null, а только потом значения).

bool SetString(string[,] array, string str, int index)
{
   for (int i = 0; i < array.GetLength(0); i++)
      if (array[i,index] != null)
         if (array[i,index] == str)
            return false;
   for (int i = 0; i < array.GetLength(0); i++)
      if (array[i,index] == null)
      {
         array[i,index] = str;
         return true;
      }
   return false;
}
READ ALSO
Настройка отображения данных в WinForms

Настройка отображения данных в WinForms

Делаю программку, наверно правильно Parser называется

244
В webApi контроллере не работет Ninject

В webApi контроллере не работет Ninject

Не могу понять как запустить Ninject в Api Controller при добавлении его в MVC проект

189
Цифровая подпись RSA

Цифровая подпись RSA

Здравствуйте, делаю лабораторную работу и никак не могу разобраться как получить вменяемый хэш-образВ общем суть задачи состоит в 1

267