从字符串中删除重复值

时间:2015-12-17 09:44:06

标签: c# string c#-4.0

我有两个字符串

javacript

现在我要比较两个字符串并删除重复的值和 结果应该是

string s1 = "Apple, Mango, Cherry";
string s2 = "Apple, Mango, Cherry, Pear";

怎么做?

我试过了:

string s3 = "Pear"

但它没有给出预期的结果。

7 个答案:

答案 0 :(得分:2)

使用String.SplitEnumerable.ExceptConcatString.Join

string s1 = "Apple, Mango, Cherry";
string s2 = "Apple, Mango, Cherry, Pear";

var s1Token = s1.Split(',').Select(t => t.Trim()).ToArray();
var s2Token = s2.Split(',').Select(t => t.Trim()).ToArray();
var inSecondNotFirst = s1Token.Except(s2Token);
var inFirstNotSecond = s2Token.Except(s1Token);
string s3 = String.Join(", ", inSecondNotFirst.Concat(inFirstNotSecond));

但效率更高(O(n))将使用HashSet<T>及其SymmetricExceptWith

 var s1Token = new HashSet<string>(s1.Split(',').Select(t => t.Trim()));
 var s2Token = new HashSet<string>(s2.Split(',').Select(t => t.Trim()));
 s1Token.SymmetricExceptWith(s2Token);
 string s3 = String.Join(", ", s1Token);

答案 1 :(得分:1)

如果它们是字符串列表,请使用Except

List<string> s1 = new List<string> {"Apple", "Mango","Cherry"};
List<string> s2 = new List<string> {"Apple", "Mango", "Cherry", "Pear"};
var result = s2.Except(s1); //Pear

或者如果它们只是字符串,那么应该得到你最喜欢的结果:

string s1 = "Apple, Mango, Cherry";
string s2 = "Apple, Mango, Cherry, Pear";
string result = s2.Replace(s1 + ',', "");// Pear

答案 2 :(得分:0)

string s1 = "Apple, Mango, Cherry";
string s2 = "Apple, Mango, Cherry, Pear";

var a1 = s1.Split(',');
var a2 = s2.Split(',');

var result = string.Join(", ", a2.Except(a1));

答案 3 :(得分:0)

你可以试试这个:

var array1 = s1.Split(',');
var array2 = s2.Split(',');


var s= array1.Except(array2).Concat(array2.Except(array1));

这将从数组

中找到唯一的

答案 4 :(得分:0)

还有一个(基于OP的例子):

var list1 = new List<string> { "Apple", "Mango", "Cherry", "Strawberry" };
var list2 = new List<string> { "Apple", "Mango", "Cherry", "Pear" }; 

var ulist = list1.Except(list2).Union(list2.Except(list1)).ToList();

答案 5 :(得分:0)

查看HashSet类的SymmetricExceptWith方法 https://msdn.microsoft.com/en-us/library/bb336848(v=vs.110).aspx

    public function getAjaxData()
      {

            JHtml::_('jquery.framework');

            $document = JFactory::getDocument();
            $document->addScript('/space/media/media/js/mainscript.js');

          function days_in_month($month, $year) 
          { 
            // calculate number of days in a month 
            return $month == 2 ? ($year % 4 ? 28 : ($year % 100 ? 29 : ($year % 400 ? 28 : 29))) : (($month - 1) % 7 % 2 ? 30 : 31); 
          }

          // Вычисляем число дней в текущем месяце

          $currentYear = date('Y');
          $currentMonth = date('n');
          if(isset($_REQUEST['year']))
            $currentYear = $_REQUEST['year'];
          if(isset($_REQUEST['month']))
            $currentMonth = $_REQUEST['month'];


          $rusmonth = array('Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь');

          $dayofmonth = days_in_month($currentMonth, $currentYear);
          // Счётчик для дней месяца
          $day_count = 1;

          // 1. Первая неделя
          $num = 0;
          for($i = 0; $i < 7; $i++)
          {
            // Вычисляем номер дня недели для числа
            $dayofweek = date('w',
                              mktime(0, 0, 0, $currentMonth, $day_count, $currentYear));
            // Приводим к числа к формату 1 - понедельник, ..., 6 - суббота
            $dayofweek = $dayofweek - 1;
            if($dayofweek == -1) $dayofweek = 6;

            if($dayofweek == $i)
            {
              // Если дни недели совпадают,
              // заполняем массив $week
              // числами месяца
              $week[$num][$i] = $day_count;
              $day_count++;
            }
            else
            {
              $week[$num][$i] = "";
            }
          }

          // 2. Последующие недели месяца
          while(true)
          {
            $num++;
            for($i = 0; $i < 7; $i++)
            {
              $week[$num][$i] = $day_count;
              $day_count++;
              // Если достигли конца месяца - выходим
              // из цикла
              if($day_count > $dayofmonth) break;
            }
            // Если достигли конца месяца - выходим
            // из цикла
            if($day_count > $dayofmonth) break;
          }

          // 3. Выводим содержимое массива $week
          // в виде календаря
          // Выводим таблицу
          echo '<div> <span id="prev" data-month="'.$currentMonth.'" data-year="'.$currentYear.'"><</span> '.$rusmonth[$currentMonth-1].' <span id="next" data-month="'.$currentMonth.'" data-year="'.$currentYear.'">></span>  </div>';
          echo '<div id="calendar_wrap">';
            echo '<table border=1>';
            echo '<tr>
                        <th>ПН</th>
                        <th>ВТ</th>
                        <th>СР</th>
                        <th>ЧТ</th>
                        <th>ПТ</th>
                        <th>СБ</th>
                        <th>ВС</th>
                     </tr>';
            for($i = 0; $i < count($week); $i++)
            {
              echo "<tr>";
              for($j = 0; $j < 7; $j++)
              {
                if(!empty($week[$i][$j]))
                {
                  // Если имеем дело с субботой и воскресенья
                  // подсвечиваем их
                  if($j == 5 || $j == 6) 
                       echo "<td><font color=red>".$week[$i][$j]."</font></td>";
                  else echo "<td>".$week[$i][$j]."</td>";
                }
                else echo "<td>&nbsp;</td>";
              }
              echo "</tr>";
            } 
            echo "</table>";
          echo '</div>';


exit;
  }

您可以轻松地重构此操作以删除其他作业。

答案 6 :(得分:0)

string s1 = "Apple, Mango, Cherry";

string s2 = "Apple, Mango, Cherry, Pear";

List<string> list1 = s1.Split(',').Select(s => s.Trim()).ToList();
List<string> list2 = s2.Split(',').Select(s => s.Trim()).ToList();

var res = list2.Count > list1.Count ? list2.Where(s => !list1.Contains(s)).ToList() :
                                      list1.Where(s => !list2.Contains(s)).ToList();