У меня есть четыре значения, которые будут меняться. Я хочу получить строку из них, содержащую два самых больших из этих значений ("v1, v2"
). Они могут быть в последовательности или самостоятельно. Мне все равно. Я пробовал несколько разных способов, но я не эксперт в этом, и я просто не могу понять. Я понял, как получить максимальное значение в последовательности, используя функцию max()
, но мне также нужен второй по величине.XQuery найти два самых больших значения
ответ
Ниже приведено право, за исключением случаев, когда оно не касается случаев, когда максимальное значение дублируется (и поэтому должно быть возвращено для обоих значений).
declare variable $seq := (2,4,3,1); (: define the input sequence :)
max($seq), max($seq[. != max($seq)]) (: evaluate to maximum and max of values not equal
to the global maximum :)
Если вы хотите, чтобы справиться с другим случаем, а также, один из способов были бы таким образом:
(: from http://www.xqueryfunctions.com/xq/functx_sort-as-numeric.html :)
declare function local:sort-as-numeric
($seq as item()*) as item()* {
for $item in $seq
order by number($item)
return $item
};
(: define the input sequence :)
declare variable $seq := (2,4,3,1);
(: sort the sequence, then take the last and second-to-last values :)
local:sort-as-numeric($seq)[position()=(last()-1, last())]
... очевидно, что если вы хотите нечисловой вид, изменить order by number($item)
к order by $item
,
Вот и все. Спасибо, Чарльз! Просто нужно 'max ($ seq [.! = Max ($ seq)])'. Прекрасно работает. Еще раз спасибо! – austinminn
Вот общий способ получить максимальное количество N из последовательности.
declare function local:max-N(
$seq as item()*,
$N as xs:int
) as item()*
{
if ($N gt 0)
then
let $max := max($seq)[1]
return ($max, local:max-N($seq[. ne $max], $N - 1))
else()
};
Например, чтобы решить эту проблему, вы можете описать:
local:max-N(
(111, 22, 333, 4, 55, 66, 7, 88),
2)
=> (333, 111)
- 1. Найти два самых больших числа, C++
- 2. Два самых больших смежных подмассива
- 3. Найти два самых больших числа в элементах N
- 4. AS3 - Как найти ДВА самых больших номеров в массиве
- 5. Как найти три самых больших значения в кадре данных?
- 6. Как найти два самых отдаленных пункта?
- 7. Измените каждый два самых больших элемента матричных строк и столбцов
- 8. найти верх два самых маленьких значения из таблицы
- 9. два самых больших чисел в массиве из 4 элементов
- 10. Как быстро умножить два самых больших элемента массива
- 11. Поиск m самых больших номеров
- 12. Определите 10 самых больших комнат
- 13. Сохранение самых больших значений карты?
- 14. Печать самых больших 3 номеров
- 15. Найти набор самых больших смежных прямоугольников для покрытия нескольких областей
- 16. Как найти 10 самых больших файлов в структуре каталогов
- 17. Как найти ключи от самых больших значений в Hash R?
- 18. Найти 5 самых больших значений для атрибута коллекции в MongoDB
- 19. Как эффективно найти 10 самых больших чисел из миллиардов чисел?
- 20. Как бы я мог найти два самых больших элемента в ArrayList через divide и conquer?
- 21. Как выбрать 3 самых больших результата, но исключить нулевые значения
- 22. SQL получить 10 самых больших средних значений
- 23. Сортировать Perl хэш от самых больших до самых маленьких
- 24. Связанный список сортировать от самых маленьких до самых больших
- 25. Сортировка результатов от самых больших до самых маленьких?
- 26. Пять самых больших значений в столбце
- 27. Найти все значения «null» с помощью xquery
- 28. Найти и распечатать первые три самых больших целочисленных значения от arraylist
- 29. Значения XQuery
- 30. C# Поиск 3 самых больших значений в 2D-массиве
Этот вопрос будет значительно улучшено, если вы показали, что выглядит ваши данные как. Это сырая последовательность? Ряд элементов, из которых вы извлекаете значения? Что-то другое? –
В любом случае - подумайте об этом на минуту. Вам нужен макс, который вы уже знаете, как это сделать, тогда вы хотите * самое большое значение, которое не является максимальным *. –
Что вы хотите сделать, если ваша последовательность выглядит как '1,2,4,4'? Возвратите '4' дважды, или' 2' и '4' отдельно? –