Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.57/21: Рейтинг темы: голосов - 21, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 20
1

Метод Contains аналог оператору 'in' в других языках программирования

26.03.2013, 23:33. Просмотров 4283. Ответов 5
Метки нет (Все метки)

Не могу никак найти решение проблемы. В других языках программирования есть оператор вхождения in. В c# он тоже есть, только выполняет не все функции. Так вот в c# нашел метод Contains. Но как сделать так, чтобы можно было проверить входят ли элементы одного списка в другой?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
List<string> ignoreWords = new List<string> { "the", "of", "to", "and", "a", "in", "is", "it" };
List<string> words = new List<string>();
 
words.Add("Hello world");
words.Add("WTF");
words.Add("Don't mention it");
var rangeList = Enumerable.Range(0, words.Count).ToList();
 
foreach (int i in rangeList)
{
    var word = words[i];
    if (word.Contains(ignoreWords)) // Метод Contains принимает только строку, но не список. Как быть?
    {
        Console.WriteLine("Найдено совпадение");
    }
}
На другом языке к примеру на Python
Python
1
2
3
4
    
for i in range(len(words)):
   word=words[i]
   if word in ignorewords: continue
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.03.2013, 23:33
Ответы с готовыми решениями:

Аналог оператора 'in' в других языках
Господа небольшой вопрос, в шарпе есть contains, который в принципе является аналогом in, но...

Подключение библиотеки, написанной на VS в других языках программирования
Существует ли возможность написать на VS такую dll - библиотеку, которую можно было бы использовать...

Наследование в CSS, как в других языках программирования
Здравствуйте! Я только начинаю изучать HTML и CSS, хотя, с программированием уже знаком на...

Сети Петри . Любой простой пример программы с сетями Петри С++ или на других языках программирования
Помогите пожалуйста . Сети Петри . Любой простой пример программы с сетями Петри С++ или на других...

5
23 / 23 / 4
Регистрация: 13.03.2011
Сообщений: 326
26.03.2013, 23:44 2
Цитата Сообщение от heliogracie Посмотреть сообщение
Но как сделать так, чтобы можно было проверить входят ли элементы одного списка в другой?
Во-первых - какой фреймворк?
Во-вторых - можно в лоб: два foreach для каждого List.

Добавлено через 3 минуты
и foreach я бы писал по-другому
C#
1
2
3
4
5
6
7
8
9
10
foreach (string s1 in words)
{
    foreach (string s2 in ignoreWords)
    {
         if (s1 == s2)
         {
               //PROFIT!!
         }
    }
}
0
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 20
26.03.2013, 23:49  [ТС] 3
Цитата Сообщение от Lupus Посмотреть сообщение
Во-первых - какой фреймворк?
4.0
Цитата Сообщение от Lupus Посмотреть сообщение
Во-вторых - можно в лоб: два foreach для каждого List.
А более элегантного решения нет? Просто если один из листов будет содержать от 1000 до 50000 слов, то два цикла слишком много перебора.
0
23 / 23 / 4
Регистрация: 13.03.2011
Сообщений: 326
26.03.2013, 23:57 4
Цитата Сообщение от heliogracie Посмотреть сообщение
4.0

А более элегантного решения нет? Просто если один из листов будет содержать от 1000 до 50000 слов, то два цикла слишком много перебора.
В 4-ке, наверное, есть. По-крайней мере в LINQ можно поискать.
Я конечно не уверен, но мне кажется, что все такие приблуды всё равно основаны на циклах. В конце концов, break и continue, если надо, работают.
0
0 / 0 / 0
Регистрация: 23.03.2013
Сообщений: 20
27.03.2013, 00:10  [ТС] 5
Цитата Сообщение от Lupus Посмотреть сообщение
В 4-ке, наверное, есть. По-крайней мере в LINQ можно поискать.
Я конечно не уверен, но мне кажется, что все такие приблуды всё равно основаны на циклах. В конце концов, break и continue, если надо, работают.
Правильно ли я понял тебя

C#
1
2
3
4
5
6
7
8
9
10
11
12
                    
foreach (string word in words)
{
    foreach (string ignoreWord in ignoreWords)
    {
        if (word == ignoreWord)
        {
            continue; // Для перехода к внутреннему циклу
        }
    }
    break; // Для перехода во внешний цикл
}
Я только не понял в какой последовательности будет выполняться этот цикл. Пока не отработает полностью внутрений, не переходим во внешний?
0
Master of Orion
Эксперт .NET
6074 / 4930 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
27.03.2013, 00:30 6
не очень ясно что вам нужно
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
using System;
using System.Collections.Generic;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            var allwords = new List<string> { "the", "of", "to", "and", "a", "in", "is", "it" };
            var somewords = new HashSet<string> { "the", "of", "in" };
            var otherwords = new HashSet<string> {"of", "and", "Hello"};
            Console.WriteLine("Somewords is subset of allword = {0}", somewords.IsSubsetOf(allwords));
            Console.WriteLine("Otherwords is subset of allword = {0}", otherwords.IsSubsetOf(allwords));
            Console.ReadKey();
        }
    }
}
так можно выяснить, является ли надмножеством и тд, но все же имхо это не то. Объясните попонятней. Если знаете, можете на руби, его я получше знаю.

Добавлено через 3 минуты
heliogracie, там по-любому будет 2 вложенных цикла. Питон не волшебный язык и вряд ли они умудрились сделать алгоритм быстрее, чем его теоретически возможная минимальная оценка

Добавлено через 3 минуты
Самый рациональный способ - разбить на подстроки и сравнивать их, тогда можно так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            var ignoreWords = new HashSet<string> { "the", "of", "to", "and", "a", "in", "is", "it" };
            var words = new List<string> {"Hello world", "WTF", "Don't mention it"};
            foreach (var word in words)
                if (word.Split(' ').Any(ignoreWords.Contains))
                    Console.WriteLine("Catch : {0}", word);
            Console.ReadKey();
        }
    }
}
Добавлено через 1 минуту
Так как высчитываются хеши, то получается более быстрый доступ, чем тупой перебор

Добавлено через 7 минут
Для произвольных знаков пунктуации можно так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main()
        {
            var ignoreWords = new HashSet<string> { "the", "of", "to", "and", "a", "in", "is", "it" };
            var words = new List<string> {"Hello world", "WTF", "Don't mention it."};
            foreach (var word in words)
                if (Regex.Split(word, @"\W").Any(ignoreWords.Contains))
                    Console.WriteLine("Catch : {0}", word);
            Console.ReadKey();
        }
    }
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.03.2013, 00:30

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Есть ли аналог Оператору foreach из C#
Есть ли в Си аналог Оператору foreach который повторяет группу вложенных операторов для каждого...

Не могу понять, есть ли аналог оператору EQUIVALENCE?
Всем добрый день форумчане! Подскажите пожалуйста. Есть ли в Java, что-либо подобное оператору...

Использование dll в других языках
Добрый вечер. Ситуация такая, у меня есть dll(библиотека классов) написанная на C#. Смогу ли я...

Графика в языках программирования
1. Изобразить движение маятника. 2. Изобразить пароход и закрасить его отдельные элементы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.