我有两个字符串
javacript
现在我要比较两个字符串并删除重复的值和 结果应该是
string s1 = "Apple, Mango, Cherry";
string s2 = "Apple, Mango, Cherry, Pear";
怎么做?
我试过了:
string s3 = "Pear"
但它没有给出预期的结果。
答案 0 :(得分:2)
使用String.Split
,Enumerable.Except
,Concat
和String.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> </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();