我有两个多维数组:
using (Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile())
{
if (EncryptDoc.Checked)
{
if (masterPassword.Text == "")
{
MessageBox.Show("invalid Master password");
goto SkipZip;
}
zip.Encryption = EncryptionAlgorithm.WinZipAes256; // this is the problem line, will not compile**
zip.Password = masterPassword.Text;
}
zip.AddSelectedFiles("*.RTF", "C:\\Charles GUI\\OpenFileDialogueSample\\Drug1\\Dev1\\Output");
//
// add the report into a different directory in the archive
// zip.AddFile("c:\\Reports\\2008-Regional-Sales-Report.pdf", "files");
//zip.AddFile("ReadMe.txt");
zip.Save("c:\\temp\\MyZipFile.zip");
_lblPagePrint.Text = "Zip RTFs Complete";
}
所需的结果是:
const defaultData = [
["ad", 0],
["ae", 0],
["af", 0]
]
const data = [
["az", 20],
["ad", 50]
]
此处az被忽略,因为它无效,因为它不在defaultData中。 广告有效,因此0会覆盖50。
我如何最好地产生这个结果。谢谢吗?
请假定两个数组均未排序。预期结果也不需要排序。
香草JS或Lodash都可以。
答案 0 :(得分:2)
使用data
将dataByKey
转换为对象(_.fromPairs()
)。映射defaultData
,并检查dataByKey
中是否存在“键”(索引0)。如果是,请使用dataByKey
中的值创建一个新数组。如果没有返回原始数组。
const defaultData = [
["ad", 0],
["ae", 0],
["af", 0]
]
const data = [
["az", 20],
["ad", 50]
]
const dataByKey = _.fromPairs(data)
const result = defaultData.map(o => o[0] in dataByKey ? [o[0], dataByKey[o[0]]] : o)
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
答案 1 :(得分:1)
尝试一下,我正在使用map()创建一个新数组,并使用find()从第二个数组中查找元素。
我比较默认数组中每个子数组的第一个索引项,如果第二个数组中的任何项在其第一个索引中具有相同的元素,那么我将其返回,如果没有匹配项,则不返回任何内容。
如果我有一个匹配的项目,那么我将使用其元素创建一个新数组。 如果没有匹配的商品,则使用默认商品的默认元素创建一个新商品。
iOS
答案 2 :(得分:1)
您可以首先从数据创建一个对象,然后对defaultData使用 Entity attachment = new Entity("activitymimeattachment");
FileStream stream = File.OpenRead(fileName);
byte[] byteData = new byte[stream.Length];
stream.Read(byteData, 0, byteData.Length);
stream.Close();
// Encode the data using base64.
string encodedData = System.Convert.ToBase64String(byteData);
attachment["subject"] = "Attachment";
attachment["filename"] = "emailstatement.pdf";
//byte[] fileStream = Encoding.ASCII.GetBytes(fileName);
attachment["body"] = encodedData;
attachment["mimetype"] = @"application\pdf";
attachment["attachmentnumber"] = 1;
attachment["objectid"] = new EntityReference("email", emailguid);
attachment["objecttypecode"] = "email";
service.Create(attachment);
方法来创建新数组并通过键从数据中获取值。
map
答案 3 :(得分:1)
使用map
遍历defaultData
,并使用find
将每个迭代数组与data
匹配:
const defaultData = [['ad', 0],['ae', 0],['af', 0]];
const data = [['az', 20],['ad', 50]];
const expected = defaultData.map(arr => {
// Destructure the first element from `arr`
// and assign it to `code`
const [ code ] = arr;
// `find` the array in `data` where the first element
// matches `code`
const found = data.find(el => el[0] === code);
// If `found` is undefined return the whole array
// otherwise return a new array with the code and the value
// from the found array
return found ? [code, found[1]] : arr;
});
console.log(expected);
答案 4 :(得分:1)
您可以像这样使用map / reduce:
const defaultData = [
["ad", 0],
["ae", 0],
["af", 0]
]
const data = [
["az", 20],
["ad", 50]
]
const result = defaultData.map(arr => data.reduce(([dKey, dVal], [key, val]) => [ dKey, dKey === key ? val : dVal ], arr));
console.log(result);