Я протестировал приведенный ниже код и работал нормально
Также я использую библиотеку: org.apache.commons.lang.ArrayUtils
public void testConcatArrayString(){
String[] a = null;
String[] b = null;
String[] c = null;
a = new String[] {"1","2","3","4","5"};
b = new String[] {"A","B","C","D","E"};
c = (String[]) ArrayUtils.addAll(a, b);
if(c!=null){
for(int i=0; i<c.length; i++){
System.out.println("c[" + (i+1) + "] = " + c[i]);
}
}
}
С уважением
См. Эту статью в моем блоге для более подробного объяснения того, как это работает:
С новым PostgreSQL 8.4
:
SELECT *
FROM (
SELECT site, url, ROW_NUMBER() OVER (PARTITION BY site ORDER BY url) AS rn
FROM urls
)
ORDER BY
rn, site
] В более старых версиях:
SELECT site,
(
SELECT url
FROM urls ui
WHERE ui.site = sites.site
ORDER BY
url
OFFSET total
LIMIT 1
) AS url
FROM (
SELECT site, generate_series(0, cnt - 1) AS total
FROM (
SELECT site, COUNT(*) AS cnt
FROM urls
GROUP BY
site
) s
) sites
ORDER BY
total, site
, хотя может быть менее эффективным.
Я думаю, вы слишком усложняете это. Почему бы просто не использовать
ORDER BY NewID ()
Вы запрашиваете циклический алгоритм, но я думаю, что простое
SELECT site, url FROM urls ORDER BY RANDOM()
поможет. Он должен работать, даже если URL-адреса с одного сайта сгруппированы в db.
Вы можете использовать функцию liftM *
из модуля Control.Monad или функции liftA *
для ] аппликативы .
liftM
позволяет поднять чистую функцию для работы внутри монады, например:
ghci> let s = return "Hello" :: IO String
ghci> liftM reverse s
"olleH"
Таким образом, вам не нужно вручную писать такие вещи, как " s >> = \ x -> return (reverse x)
"везде.
Хотя это не поможет вам с вашим примером [(String, Int, IO Int)]
, если чистый у вас есть функция [(String, Int, Int)]
. Поскольку третий элемент в кортеже на самом деле не является Int
.
В этом случае я бы предложил сначала написать функцию [(String, Int, IO Int)] -> IO [(String, Int, Int)]
и применяют повышенную чистую функцию.
Это самая общая функция, которую я мог придумать для этого:
conv :: Monad m => (f (m a) -> m (f a)) -> [f (m a)] -> m [f a]
conv f = sequence . map f
Вы можете назвать ее так:
liftTrd :: Monad m => (a, b, m c) -> m (a, b, c)
liftTrd (x, y, mz) = mz >>= \z -> return (x, y, z)
conv liftTrd [("hi", 4, return 2)] :: IO [(String, Int, Int)]
Эта функция будет работать только в том случае, если у вас есть единственная монада, которая находится где-то глубоко в типе. Если у вас их несколько, я думаю, вам действительно стоит подумать о типе, с которым вы работаете, и посмотреть, не сможете ли вы сделать это проще.
//www.example.com/some/other/fileВременная таблица:
example.com 1
stackoverflow.com 2
perl.org 3
Затем для каждого URL-адреса вы ищите значение в временной таблице и добавляете к нему 3 (потому что в ней 3 отдельные записи):
URL-адресов :
http://www.example.com/some/file 1
http://www.example.com/some/other/file NULL
https://stackoverflow.com/questions/ask NULL
https://stackoverflow.com/tags NULL
http://use.perl.org/ NULL
Временная таблица:
example.com 4
stackoverflow.com 2
perl.org 3
URL-адреса:
http://www.example.com/some/file 1
http://www.example.com/some/other/file 4
https://stackoverflow.com/questions/ask NULL
https://stackoverflow.com/tags NULL
http://use.perl.org/ NULL
Временная таблица:
example.com 7
stackoverflow.com 2
perl.org 3
и так далее, пока вы не дойдете до
http://www.example.com/some/file 1
http://www.example.com/some/other/file 4
https://stackoverflow.com/questions/ask 2
https://stackoverflow.com/tags 5
http://use.perl.org/ 3
Для большого количества записей это будет медленным. И будет сложно работать со многими вставками / удалениями, но результатом будет безупречное циклическое упорядочение.
s имеет 3 отдельные записи):URL-адреса:
http://www.example.com/some/file 1
http://www.example.com/some/other/file NULL
https://stackoverflow.com/questions/ask NULL
https://stackoverflow.com/tags NULL
http://use.perl.org/ NULL
Временная таблица:
example.com 4
stackoverflow.com 2
perl.org 3
URL-адреса:
http://www.example.com/some/file 1
http://www.example.com/some/other/file 4
https://stackoverflow.com/questions/ask NULL
https://stackoverflow.com/tags NULL
http://use.perl.org/ NULL
Временная таблица:
example.com 7
stackoverflow.com 2
perl.org 3
и так далее, пока вы не дойдете до
http://www.example.com/some/file 1
http://www.example.com/some/other/file 4
https://stackoverflow.com/questions/ask 2
https://stackoverflow.com/tags 5
http://use.perl.org/ 3
Для многих записей это будет медленным. И будет сложно работать со многими вставками / удалениями, но результатом будет безупречное циклическое упорядочение.
s имеет 3 отдельные записи):URL-адреса:
http://www.example.com/some/file 1
http://www.example.com/some/other/file NULL
https://stackoverflow.com/questions/ask NULL
https://stackoverflow.com/tags NULL
http://use.perl.org/ NULL
Временная таблица:
example.com 4
stackoverflow.com 2
perl.org 3
URL-адреса:
http://www.example.com/some/file 1
http://www.example.com/some/other/file 4
https://stackoverflow.com/questions/ask NULL
https://stackoverflow.com/tags NULL
http://use.perl.org/ NULL
Временная таблица:
example.com 7
stackoverflow.com 2
perl.org 3
и так далее, пока вы не дойдете до
http://www.example.com/some/file 1
http://www.example.com/some/other/file 4
https://stackoverflow.com/questions/ask 2
https://stackoverflow.com/tags 5
http://use.perl.org/ 3
Для многих записей это будет медленным. И будет сложно работать со многими вставками / удалениями, но результатом будет безупречное циклическое упорядочение.
Есть гораздо более простое и быстрое решение ...
-> это очень быстро и индексируется -> строки будут иметь повторяющийся, но случайный порядок