数组的增删改查操作

做批量数据录入时需要对json内的数组进行增删改查操作,splice还是很强大的记录一下使用方法。

var lang = ["php","java","javascript"]; 

//删除 
var removed = lang.splice(2,1); 
console.log(lang); //php,javascript 
//console.log(removed); //java ,返回删除的项 
//插入 
var insert = lang.splice(0,0,"asp"); //从第0个位置开始插入 
//alert(insert); //返回空数组 
console.log(lang); //asp,php,javascript 
//替换 
var replace = lang.splice(1,1,"c#","ruby"); //删除一项,插入两项 
//alert(lang); //asp,c#,ruby 

console.log(replace); //php,返回删除的项 



另外,json多项的增删改查也贴上,备用:

/**
 * Json对象操作,增删改查
 *
 * @author lellansin
 * @blog www.lellansin.com
 * @version 0.1
 * 
 * 解决一些常见的问题
 * get/set 解决获取和设置时,无节点中断的问题
 * create  可以创建多级节点,若存在则覆盖新值
 * delete  删除节点及其子节点
 * print_r 格式化输出对象(调试用)
 * 实例见底部
 */


function Json() {


}


/**
 * 获取Json对象中的某个节点
 * 例如:json.get(Data, 'country', 'province', 'city');
 * 结果则返回 Data['country']['province']['city']
 * 无则返回false
 */
Json.prototype.get = function(obj, key) {
  var args = this.get.arguments;
  var result = obj;


  for (var i = 1; i < args.length; i++) {
    result = result[args[i]];
    if (result === undefined) {
      return false;
    };
  };
  return result;
};


/**
 * 设置Json对象中的某个节点
 * 例如:obj.set(data, "ENTRY", "FA_TOKEN_INVALID", 1234);
 * 将 data['ENTRY']['FA_TOKEN_INVALID'] 设置为1234
 * 成功true, 失败false
 */
Json.prototype.set = function(obj, key) {
  var args = this.set.arguments;
  if (ergodic_set(obj, args, 1)) {
    return true;
  } else {
    return false;
  }
}


/**
 * 在Json对象中创建节点(若存在则覆盖值)
 * 例如:obj.create(data, 'add', 'hello', 'test', 120);
 * 添加 data['create']['hello']['test'] 节点并设置值为 120
 * 成功true, 失败false
 */
Json.prototype.create = function(obj, key) {
  var args = this.create.arguments;
  if (ergodic_create(obj, args, 1)) {
    return true;
  } else {
    return false;
  }
}


/**
 * 在Json对象中删除节点
 * 例如:obj.delete(prods, 'grade', 'math');
 * 成功true, 失败false
 */
Json.prototype.delete = function(obj, key) {
  var args = this.delete.arguments;
  if (ergodic_delete(obj, args, 1)) {
    return true;
  } else {
    return false;
  }
}


/**
 * 返回Json对象的字符串形式(封装 ECMAScript 库函数)
 */
Json.prototype.getStr = function(obj) {
  return JSON.stringify(obj);
}


/**
 * 解析字符串返回Json对象(封装 ECMAScript 库函数)
 */
Json.prototype.getJson = function(str) {
  return JSON.parse(str);
}


/**
 * 格式化输出Json对象
 */
Json.prototype.print_r = function(obj) {
  console.log("{")
  ergodic_print(obj, "");
  console.log("}")
}


function ergodic_print(obj, indentation) {
  var indent = " " + indentation;
  if (obj.constructor == Object) {
    for (var p in obj) {
      if (obj[p].constructor == Array || obj[p].constructor == Object) {
        console.log(indent + "[" + p + "] => " + typeof(obj) + "");
        console.log(indent + "{");
        ergodic_print(obj[p], indent);
        console.log(indent + "}");
      } else if (obj[p].constructor == String) {
        console.log(indent + "[" + p + "] => '" + obj[p] + "'");
      } else {
        console.log(indent + "[" + p + "] => " + obj[p] + "");
      }
    }
  }
}


function ergodic_set(obj, args, floor) {
  if (obj.constructor == Object) {
    for (var tmpKey in obj) {
      if (tmpKey == args[floor]) {
        if (floor < args.length - 2) {
          return ergodic_set(obj[tmpKey], args, floor + 1);
        } else {
          // 此时参数floor为倒数第二个,加1值为最后一个
          obj[tmpKey] = args[floor + 1];
          console.log("成功设置,返回true");
          return true;
        }
      }
    }
  }
}


function ergodic_create(obj, args, floor) {
  if (obj.constructor == Object) {
    for (var tmpKey in obj) {
      if (tmpKey == args[floor]) {
        if (floor < args.length - 2) {
          return ergodic_create(obj[tmpKey], args, floor + 1);
        } else {
          obj[tmpKey] = args[floor + 1];
          return true;
        }
      }
    }
  }
  // 节点不存在,创建新节点
  if (floor < args.length - 1) {
    var jsonstr = getJsonFormat(args[args.length - 1]);


    for (var i = args.length - 2; i > floor; i--) {
      jsonstr = '{"' + args[i] + '":' + jsonstr + '}';
    };


    // 使用eval解析第三方Json数据时,可能会执行恶意代码
    // var node = eval('(' + jsonstr + ')');
    var node = JSON.parse(jsonstr);
    obj[args[floor]] = node;
    return true;
  }
}


function ergodic_delete(obj, args, floor) {
  if (obj.constructor == Object) {
    for (var tmpKey in obj) {
      if (tmpKey == args[floor]) {
        if (floor < args.length - 1) {
          return ergodic_delete(obj[tmpKey], args, floor + 1);
        } else {
          delete obj[tmpKey];
          return true;
        }
      }
    }
  }
}




function getJsonFormat(param) {
  if (param.constructor == String) {
    return '"' + param + '"';
  } else {
    return param;
  }
}






/**
 * 使用实例
 */


var data = {};


var prods = {
  'name': 'Alan',
  'grade': {
    'Chinese': 120,
    'math': 130,
    'competition': {
      'NOI': 'First prize'
    }
  }
};
/*
var json = new Json();


console.log("获取Json中节点");
console.log(json.get(data)); 
console.log(json.create(data, "0",""));
console.log(json.set(data, "0", prods));
console.log(json.create(data, "1",""));
console.log(json.set(data, "1", prods));
console.log(json.create(data, "2",""));
console.log(json.set(data, "2", prods));
console.log(json.get(data)); 
json.print_r(data);*/
/*
console.log(json.get(data, "OK")); // 200
console.log(json.get(data, "ENTRY", "FA_TOKEN_INVALID")); // 1001
console.log(json.get(data, "TEST", "获取没有的节点")); // false 没有的节点返回 false


console.log("设置Json中节点");
console.log(json.set(data, "ENTRY", "FA_TOKEN_INVALID", 1234));   // true 设置成功
console.log(json.get(data, "ENTRY", "FA_TOKEN_INVALID"));  // 1234   获取刚设置的节点
console.log(json.set(data, "ENTRY", "测试设置没有的节点", 1234)); // false 设置失败


console.log("创建新的Json节点");
var prods = {
  'name': 'Alan',
  'grade': {
    'Chinese': 120,
    'math': 130,
    'competition': {
      'NOI': 'First prize'
    }
  }
};
console.log(json.create(prods, 'create', 'hello', 'test', 120)); // true
console.log(json.create(prods, 'create', 'hello', 'test2', '通过')); // true


console.log("格式化输出节点");
json.print_r(prods);


console.log("删除节点");
console.log(json.delete(prods, 'grade', 'math')); // true
console.log(json.delete(prods, 'grade', 'competition')); // true
console.log(json.delete(prods, 'grade', '删除没有的节点')); // false
json.print_r(prods);
*/


# 题目重述 请用 C# 实现一维数组的增、删、改、查操作,并说明其特点与限制。 --- # 详解 C# 中的数组是固定长度的引用类型数据结构,一旦创建,长度不可变。因此,“增”和“删”操作不能直接在原数组上完成,需通过创建新数组实现。以下是详细操作示例: ## 1. **查(查找)** 通过索引访问元素(索引从 0 开始): ```csharp int[] arr = {1, 2, 3, 4, 5}; Console.WriteLine(arr[2]); // 输出: 3 ``` 查找某个值的索引(使用 `Array.IndexOf`): ```csharp int index = Array.IndexOf(arr, 3); Console.WriteLine(index); // 输出: 2 ``` 判断是否存在某元素: ```csharp bool exists = Array.Exists(arr, x => x == 4); ``` ## 2. **改(修改)** 直接通过索引赋值: ```csharp arr[2] = 10; // 此时 arr 变为 {1, 2, 10, 4, 5} ``` 支持范围修改(C# 8+): ```csharp int[] sub = arr[1..4]; // 截取索引 1 到 3 的子数组 ``` ## 3. **增(插入)** 数组长度固定,需创建新数组并复制内容。 ### 在指定位置插入一个元素: ```csharp public static int[] Insert(int[] arr, int value, int index) { int n = arr.Length; int[] newArr = new int[n + 1]; Array.Copy(arr, 0, newArr, 0, index); newArr[index] = value; Array.Copy(arr, index, newArr, index + 1, n - index); return newArr; } // 使用示例: int[] result = Insert(arr, 99, 2); // 在索引 2 处插入 99 ``` ## 4. **删(删除)** 同样需创建更小数组。 ### 删除指定索引处元素: ```csharp public static int[] DeleteAt(int[] arr, int index) { int n = arr.Length; int[] newArr = new int[n - 1]; Array.Copy(arr, 0, newArr, 0, index); Array.Copy(arr, index + 1, newArr, index, n - index - 1); return newArr; } // 使用示例: int[] afterDelete = DeleteAt(result, 2); ``` ### 删除特定值(第一个匹配项): ```csharp public static int[] RemoveValue(int[] arr, int value) { int index = Array.IndexOf(arr, value); if (index == -1) return arr; // 未找到 return DeleteAt(arr, index); } ``` --- # 知识点(列出解答该问题需要的知识点) 1. **数组的静态长度特性** C# 数组一旦初始化,长度不可变,增删需创建新数组。 2. **Array.Copy 方法高效复制** 比循环赋值更快地复制数组片段,提升性能。 3. **索引与范围操作(Index/Range)** C# 8+ 支持 `^` 和 `..` 进行灵活的子数组提取。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值