Получить положение пар слов в строке слов

Вопрос:

У меня есть строка слов:

spring java spring spring spring javescript java jboss jboss tomcat jboss

Я должен разбить эту строку, используя пробел в качестве разделителя, а затем два типа пар, которые мне нужно найти

  1. Комбо-пара
  2. Next-To-Pair

Я знаю, как разбить слова

string text = "spring java spring spring spring javescript java jboss jboss tomcat jboss";
string[] list = text.Split(' ');

и он отлично работает, но я не знаю, с чего начать поиск пар, выход должен выглядеть следующим образом:

Весна: 6 Комбо-пары (0,2) (0,3) (0,4) (2,4) (3,4) и 2 соседние пары (2,3) (3,4)

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

Лучший ответ:

Это должно сделать это…

using System;
using System.Collections.Generic;
using System.Linq;

namespace ConsoleApp1
{
    class Program
    {

Определите контейнер для каждого элемента результата…

        class IndexPair
        {
            public int Index1 { get; set; }
            public int Index2 { get; set; }
        }

Ok позволяет сделать это…

        static void Main(string[] args)
        {

Объявите строку, которую мы хотим протестировать, и некоторые результирующие наборы для хранения результатов…

            var testString = "spring java spring spring spring javescript java jboss jboss tomcat jboss";
            var test = testString.Split(' ');
            var pairs = new List<IndexPair>();
            var comboPairs = new List<IndexPair>();

Прокрутите исходный массив (переменный «тест») и задайте соответствующие вопросы…

            for (int i = 0; i < test.Length; i++)
                for (int j = 0; j < test.Length; j++)
                    if (j > i && test[i] == test[j])
                    {
                        var pair = new IndexPair { Index1 = i, Index2 = j };
                        pairs.Add(pair);

                        if (j == (i + 1)) comboPairs.Add(pair);
                    }

Выведите результаты…

            Console.WriteLine("Input string: " + testString);
            Console.WriteLine("Word pairs: " + string.Join(" ", pairs.Select(p => $"{p.Index1},{p.Index2}")));
            Console.WriteLine("Combo pairs: " + string.Join(" ", comboPairs.Select(p => $"{p.Index1},{p.Index2}")));
            Console.ReadKey();
        }
    }
}

… кажется, дает ожидаемый результат, по крайней мере (хотя вопрос не совсем подходит для всех матчей).

Надеюсь, если вы следовали за этим правом, вы должны были понять, что весь код из этого ответа объединен — это полное консольное приложение, которое достигнет того, что вы хотите, когда будете работать.

Ответ №1

Есть сложные способы сделать это, легко понять:

string[] words = text.Split(' ');
for(int i=0; i<words.Length; i++){
for(int j=i+1; j<words.length; j++){
if(words[i] == words[j]){
//You have a match, do your stuff here!
}
}
}

Что бы вы сделали для каждого слова, проверьте следующее слово и далее до конца текста для совпадений и запишите их индексы (i и j соответственно).

И это для комбо:

string[] words = text.Split(' ');
for(int i=0; i<words.Length-1; i++){
if(words[i] == words[i+1]){
//You have a match, do your stuff here!
}
}

Таким образом, вы знаете, что два смежных слова равны.

Ответ №2

Я полагаю, вы начинаете с множества слов.

Вы должны отслеживать слова, которые уже обработаны, например, добавив их в HashSet. Итерируйте фронт массива назад и для каждого еще не обработанного слова, начните обработку:

  • Создайте список всех индексов слова. Для вашего примера слово spring будет иметь индексы

    0, 2, 3, 4

  • Объедините каждый индекс со следующими индексами в пары:

    (0, 2), (0, 3), (0, 4), (2, 3), (2, 4), (3, 4)

  • Разделите свои пары на пары «Next-To-Pair» и «Combo-pair», проверив, если их разность индексов равна 1

    (2, 3), (3, 4)

    (0, 2), (0, 3), (0, 4), (2, 4)

Заметьте, я не знаю, почему вы указали (3, 4) как Комбо-пар в вопросе, насколько я понимаю, это должен быть «Парапет». Пожалуйста, уточните вопрос, если я неправильно понял.

Оцените статью
TechArks.Ru
Добавить комментарий